Debug 系统应用时,导入到 AS 会有大量报红代码,基本都是 framework 和新增模块的,需要导入对应的 jar 包才方便代码查看和跳转。
一般来说,使用 Android 源码全编译之后,
会生成 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
。
这个就是我们需要的 framework.jar
(重命名一下),导入到 AS 里后,相关的代码就不会报红了。
但有些代码编译之后没有生成这个,
生成的是 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes-header.jar
,
这个不是我们需要的。
导入到 AS 里,相关的代码还是会报红。
既然有源码,自己编译生成 framework.jar 试试。
在已经编译过的代码上,执行如下命令编译,
make javac-check-framework
Android 源码编译使用 jack 编译的。
javac-check 是指用 javac(而非 jack)编译 java文件或模块,需要在已经完整编译后使用。
make javac-check-framework 意思是用 javac 编译 framework 模块。
javac 编译 framework 模块 可以生成 jar 包。
会生成如下文件,
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
out/target/product/<product_name>/obj/JAVA_LIBRARIES/framework_intermediates/javalib.jar
前者就是我们需要的。
扩展,
对于其他模块,对应的 jar 包生成路径是
out/target/common/obj/JAVA_LIBRARIES/xxx_intermediates/classes.jar
xxx 就是对应的模块的名字,如 android-support-v7-recyclerview_intermediates 。
对于 app ,对应的 jar 包生成路径是
out/target/common/obj/APP/appname_intermediates/classes.jar
app_name 就是 app 的名称,如 SystemUI_intermediates 。