需求
因为我是开发ROM的,所以系统的一些改动需要暴露给我们自己的APP。比如:
之前在PowerManager里面添加过一个新接口,用来释放所有的wake lock,接口调用如下:
代码语言:javascript
复制
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
pm.releaseAll();
现在我们的系统APK需要调用这个方法,但是因为SDK不包含该方法,导致APK编译不通过。所以需要我编译一个包含新接口方法的jar包交给APK编译。(生成jar包的方法见该文章)
编译Jar包
其实编译系统jar包很简单
代码语言:javascript
复制
make framework
即可得到framework.jar。
这时候把jar包导入到项目里,发现缺找不到jar包里的方法。这是因为,Android N使用了Jack编译。所以编出来的jar包里面没有class文件,取而代之的是一个优化过的dex文件。
如果要得到包含class文件的jar包,只需要将Jack编译关闭即可。
include $(BUILD_JAVA_LIBRARY)
include $(BUILD_STATIC_JAVA_LIBRARY)
LOCAL_JACK_ENABLED := disabled
这样再次编译出来的jar包就是包含class文件的jar包。
https://cloud.tencent.com/developer/article/1578484