如何编译含额外日志的android.jar?AOSP编译路径及方法问询
编译含自定义日志的android.jar完整指南
1. AOSP构建是否生成android.jar?
是的,android.jar是AOSP构建framework核心库的关键产物,包含你修改的Activity、Window这类系统核心类的字节码。它分为两种:一种是供系统内部使用的framework.jar,另一种是对外暴露SDK接口的android.jar。
2. android.jar的生成路径
不同AOSP版本路径略有差异,常见路径如下:
- framework核心类编译产物:
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar(这个就是包含你修改代码的核心jar,可重命名为android.jar使用) - 系统framework包:
out/target/product/<你的设备代号>/system/framework/framework.jar(系统运行时加载的库,包含所有framework类) - SDK版android.jar:
out/host/linux-x86/framework/android.jar或out/host/linux-x86/sdk/android-sdk_eng.<用户名>_linux-x86/platforms/android-<API级别>/android.jar(供开发SDK使用的对外API包)
3. 编译android.jar的几种方式
方式一:完整构建AOSP
适合首次构建或修改较多系统代码的场景:
source build/envsetup.sh lunch <你的设备代号>-userdebug # 示例:aosp_arm64-userdebug make -j$(nproc) # 用CPU核心数加速构建
方式二:单独编译framework模块
如果只修改了framework核心类,无需完整构建,节省时间:
source build/envsetup.sh lunch <你的设备代号>-userdebug make framework -j$(nproc)
执行后会重新编译framework相关代码,生成上述路径的jar包。
方式三:生成SDK专用android.jar
如果需要的是符合SDK规范的android.jar(仅包含对外公开API):
source build/envsetup.sh lunch <你的设备代号>-userdebug make sdk -j$(nproc)
产物会生成在SDK对应的platform目录下。
4. clean build后找不到android.jar的解决办法
clean操作会清空所有构建产物,所以你必须重新执行构建命令才能生成jar文件。只执行make clean而不后续构建,自然找不到任何产物。解决步骤:
- 执行
source build/envsetup.sh && lunch <你的设备代号>-userdebug - 执行
make -j$(nproc)或make framework -j$(nproc)完成构建 - 构建完成后去上述对应路径查找
额外提示
- 你添加的日志代码会被编译进classes.jar和framework.jar中,系统运行时会执行这些日志逻辑。
- 如果要在自己的应用中使用自定义android.jar,需要替换Android Studio项目中SDK目录下的对应文件,注意保持API级别一致,避免兼容性问题。
内容的提问来源于stack exchange,提问作者Tushar Gopale
相关产品推荐
相关产品推荐

