背景:
之前在修改项目原生设置 Settings.apk 的问题时,曾经想修改 support-v7 包中的 RecyclerView.java 文件,但是基于Android N 的环境下,修改后的代码一直没有编入到 Settings.apk。后来从另外的一个角度对问题进行了修改,避开了修改 android-support 包的雷区。最近在学习 support-v4 包中 ViewPager.java 的触摸事件传递以及滑动冲突解决方案时,想着增加打印来增强对流程的理解,因此还是需要探究 android-support 的资源如何导入到项目工程。在此过程中遇到了一系列的问题,希望我的解决方案能够帮助到大家。
结论:
- Android N 环境使用 jack 编译方式,是不能编译出 jar 包的,这个直接导致了修改 android-support 源码后,修改后的代码没有编入项目工程。解决方案:我们修改对应 jar 包源码的 Android.mk 文件,临时将 jack 的编译方式关掉即可。
linhongbo@ubuntu:~/sdk/androidN/frameworks/support$ git diff v4/Android.mk diff --git a/v4/Android.mk b/v4/Android.mk index 1e8adad..248f5ab 100644 --- a/v4/Android.mk +++ b/v4/Android.mk @@ -264,6 +264,7 @@ support_module_src_files += $(LOCAL_SRC_FILES) # Here is the final static library that apps can link against. include $(CLEAR_VARS) # 关闭 jack 编译 +LOCAL_JACK_ENABLED := disabled LOCAL_USE_AAPT2 := true # 在最终生成 jar 包的配置处关闭 jack 即可 LOCAL_MODULE := android-support-v4 LOCAL_SDK_VERSION := 4
- 修改完 Android.mk 文件后,就可以直接进行编译了,我是使用 mma 命令进行编译,此时如无意外,可以看到编译出了 javalib.ja