Tôi đã thực hiện một số điều tra về điều này, và kết luận của tôi đơn giản là: Điều này không thể được thực hiện nếu không có một chút công việc. Đọc phần còn lại của câu trả lời này để biết chi tiết về những gì tôi đã tìm thấy.
android.jar
thực sự bao gồm "api công cộng" của framework.jar
và core.jar
được tìm thấy trong system/frameworks/
thiết bị. android.jar
là một loại mà tôi sẽ gọi là tiêu đề thư viện Java, tất cả triển khai trong mã byte thực tế chỉ là a throw new RuntimeException("stub");
, điều này cho phép bạn xây dựng dựa trên android.jar
(ví dụ: trong Eclipse), nhưng việc thực thi phải được thực hiện trên thiết bị hoặc trình giả lập.
API công khai của Android SDK được xác định bởi các lớp / phương thức / trường không có tiền tố là @{hide}
chú thích javadoc. Tức là mọi thứ không được chú thích đều được đưa vào SDK.
android.jar
được xây dựng từ các nguồn nằm trong out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates
đó chính nó được tạo ra bởi công cụ DroidDoc nằm trong đó build/tools/droiddoc
.
DroidDoc là công cụ (có thể được điều chỉnh từ javadoc hoặc sử dụng javadoc) tạo tài liệu Android SDK thực tế. Như một tác dụng phụ, và có lẽ vì nó đã phân tích cú pháp tất cả javadoc, nó cũng tạo ra các bản gốc android sau đó được biên dịch thành các bản android.jar
phân phối trong SDK.
Vì vậy, bạn có thể bao gồm những thứ bị ẩn, nếu chỉ muốn bao gồm các phần cụ thể, chỉ cần xóa @hide
chú thích và xây dựng lại SDK.
Tuy nhiên, nếu bạn muốn bao gồm tất cả các phần ẩn, mọi thứ sẽ phức tạp hơn rất nhiều. Bạn có thể sửa đổi DroidDoc (có nguồn liên quan build/tools/droiddoc/src/Stubs.java
) để không có gì bị phát hiện là ẩn. Điều này là khá nhỏ và tôi đã thử điều này, tuy nhiên các sơ khai sau đó được tạo ra không biên dịch chút nào.
Kết luận của tôi bây giờ là điều này đơn giản là không khả thi. Các sơ khai được tạo ra nếu bạn xóa phần DroidDoc phát hiện các chú thích ẩn, đơn giản là không thể biên dịch được và sẽ yêu cầu khá nhiều công việc để biên dịch chính xác.
Vì vậy, câu trả lời của tôi cho câu hỏi của bạn là: Không, điều này không thể được thực hiện, nếu không làm rất nhiều việc. Lấy làm tiếc.
Một lưu ý phụ về mkstubs
công cụ. mkstubs
được sử dụng khi bạn tạo phần bổ trợ SDK , tức là phần bổ trợ bạn có thể tìm thấy trong trình quản lý SDK Android từ các nhà cung cấp, ví dụ: Samsung cung cấp cho bạn một API bổ sung cho nội dung cụ thể cho điện thoại Samsung. mkstubs
giống như quá trình tạo sơ khai DroidDoc, tuy nhiên nó không sử dụng @hide
chú thích, nó sử dụng một .defs
tệp mô tả gói / lớp / trường nào cần bao gồm hoặc loại trừ khỏi trình bổ trợ SDK của bạn.
Tuy nhiên, tất cả điều này đều không liên quan đến câu hỏi, vì bản dựng Android SDK không sử dụng mkstubs
công cụ. (Không may.)