一、framework编译方法
1.使用m命令编译framework只有在系统初次编译后第一次使用有效,之后编译会失败,需使用make命令。
2.编译命令及解释
下面列举部分模块的编译指令:
·对于make命令,模块名称未确定时,到相应目录下Android.mk文件中查找 LOCAL_PACKAGE_NAME 值。
通过上面的方法,可以编译成功得到framework.jar文件,但是将其push到/system/framework/后,则不一定会生效。
二、如何让它生效?
一般网上看到的做法是这样:
方法一:
将编译所生成的framework.jar推送到手机相应的位置,重启,看是否生效。如果没有生效,则继续删除/system/framework/arm目录和/system/framework/arm64目录中的boot.art和boot.oat删除掉,之后重启机器。
如果这样操作后还是不生效该怎么办?
方法二:
在源代码的根目录,初始化好环境之后,在源代码的根目录下使用make snod,重新打包生成system.img,然后通过fastboot flash system %src_dir%\system.img,将新生成的system.img刷入手机,然后重启。
很遗憾,我还是没有生效。我把上面两者结合起来还是没有生效。。
方法三:
较为花式,请慎重服用。但这种近乎重新刷机的做法,感觉一定会生效。
修改好了framework里面的东西之后,全局编译一次,然后将编译得到的结果刷入手机。
注意事项:
如果在修改framework之前就已经进行过全局编译操作,那么在修改后,再进行全局编译,速度则非常快。
如果在修改之后,还进行了git pull操作拉取了其他人对代码的修改,那么此次全局编译的速度就未知,不过基本上很慢。
三: 其他build
make bootimage
make snod (重新生成镜像,如果做出的修改会影响其它app,使用此命令;不检查dependency)
make systemimage (编译过程中会检查dependency,时间会长一点)
make otapackage
make sdk
make cts
make installclean
make services 调试
adb push out/target/product/sdm845/system/framework/services.jar system/framework
adb push out/target/product/sdm845/system/framework/services.jar.prof system/framework
adb push out/target/product/sdm845/system/framework/oat/arm64/services.art /system/framework/oat/arm64/
adb push out/target/product/sdm845/system/framework/oat/arm64/services.odex /system/framework/oat/arm64/
adb push out/target/product/sdm845/system/framework/oat/arm64/services.vdex /system/framework/oat/arm64/
adb shell killall -9 zygote --->推进去可以重启, 也可以杀死zygote , zygote64
make framework调试
adb push out/target/product/sdm845/system/framework/framework.jar system/framework
rm /system/framework/arm/boot.art
rm /system/framework/arm/boot.oat
rm /system/framework/arm64/boot.art
rm /system/framework/arm64/boot.oat
其他平台可能没有上面的目录,可以试试下面的路径
/data/dalvik-cache/arm64
libsurfaceflinger.so调试
cd frameworks/native/services/surfaceflinger
mm -j24 (修改SurfaceFlinger.cpp,会build 出libsurfaceflinger.so)
frameworks/native/services/surfaceflinger
out/target/product/msmnile/system/lib/libsurfaceflinger.so
out/target/product/msmnile/system/lib64/libsurfaceflinger.so
BufferQueueProducer.cpp 调试
cd frameworks/native/libs/gui
mm -j24
adb push out/target/product/msmnile/system/lib/vndk-29/libgui.so /system/lib/vndk-29/libgui.so
adb push out/target/product/msmnile/system/lib/libgui.so /system/lib/libgui.so
adb push out/target/product/msmnile/system/lib64/vndk-29/libgui.so /system/lib64/vndk-29/libgui.so
adb push out/target/product/msmnile/system/lib64/libgui.so /system/lib64/libgui.so
adb push out/target/product/msmnile/vendor/lib/libgui_vendor.so /vendor/lib/libgui_vendor.so
adb push out/target/product/msmnile/vendor/lib64/libgui_vendor.so /vendor/lib64/libgui_vendor.so
3, 添加第三方jar 到framework.jar
建立目录:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := AA:AA.jar
include $(BUILD_MULTI_PREBUILT)
framework修改 :frameworks/base/Android.mk
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(ext_src_files)
LOCAL_NO_STANDARD_LIBRARIES := true
LOCAL_JAVA_LIBRARIES := core
LOCAL_JAVA_RESOURCE_DIRS := $(ext_res_dirs)
LOCAL_STATIC_JAVA_LIBRARIES := AA
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := ext
LOCAL_DX_FLAGS := --core-library
include $(BUILD_JAVA_LIBRARY)
build module
mmm android/frameworks/opt/aa/
mmm android/frameworks/base/