前言
由于工作需要,需要在Android Studio中开发系统级别的应用。在把源码导入as的过程中摸了踩了很多坑,根据同事以前的成果以及自己的一些摸索,终于可以在as中开发系统级别的应用了,这里记录一下,方便你我他。
总结
总结一下,基本的步骤就是:
1、获取到源码以及根据Android.mk文件确定需要依赖的jar包、库等;
2、从编译源码输出的中间文件中寻找jar、库;
3、导入as之后,相关jar包、库的依赖;
4、一些重复资源的排查等,这些往往会引起编译不过的问题;
5、依赖framework.jar包,几乎所有的系统级应用都会使用到framework中hide的类、函数等,这是重中之重,也是最容易出问题的地方。
一、拿到系统应用的源码并分析android.mk文件
1、app源码路径
如图,在packages/apps下可以拿到我们需要的app的源码。
把该源码拷到我们本地目录上,然后分析并根据android.mk文件进行相关的导入工作。
android.mk文件可以参考:http://blog.sina.com.cn/s/blog_602f8770010148ce.html
2、分析android.mk文件
如图,显示的是我们需要依赖的jar包以及库。datetimepicker、messageformat以及framework.jar需要我们到编译源码生成的中间文件中去找,其他的jar可以直接通过gradle依赖。这些jar包、依赖库的获取可以参考:http://blog.csdn.net/qq690197664/article/details/18223495
3、根据android.mk获取jar包及依赖的库
1、根据android.mk获取jar包
如图可以在“out\target\common\obj\JAVA_LIBRARIES\framework_intermediates”目录下获取,把classes.jar改成你想要的名字即可,我为了识别,改为framework.jar。其他的jar包获取方式一样。
2、根据android.mk获取依赖库
需要依赖的库,android.mk文件中常常已经写明了获取的路径,如果找不到,多找找就是了,存在即合理。。。
如下图,给出了datetimepicker库的路径,该库,我们需要在as中通过Import Module的方式引入并依赖。
路径:”..\MTK_Android7_S31N\mydroid\frameworks\opt\datetimepicker”
把该工程拷贝到本地并且以module的方式引入工程并依赖
二、导入Android Studio中
拿到app源码并且准备好相关的jar包之后就可以进行着最关键的一步了。
1、导入到as中
1、这个,我们不断的next即可
2、导入,需要一定的时间。导入完成后,会有一个导入的说明性文件,提示我们导入过程as对文件做了什么改变等。可以删除。
2、接下来就是依赖各种库了
1、依赖*库的jar包
这种jar是可以直接通过*库依赖的,我们像平时一般的第三方应用依赖一样操作即可。如图:
2、依赖Android.mk中指明的datetimepicker库
3、依赖framework.jar,并提高其优先级。这是关键一步!
需要依赖的module下创建lib文件夹,把framework.jar放入其中
在project级别的build.gradle文件中加入如下语句,注意framework.jar的路径
在project级别的build.gradle文件中加入如下语句,这里把framework.jar包的优先级提高到比SDK高
三、总结
经过以上这些步骤,基本已经可以用Android Studio来进行系统级别的应用的开发了。总结一下,基本的步骤就是:
1、获取到源码以及根据Android.mk文件确定需要依赖的jar包、库等;
2、从编译源码输出的中间文件中寻找jar、库;
3、导入as之后,相关jar包、库的依赖;
4、一些重复资源的排查等,这些往往会引起编译不过的问题;
5、依赖framework.jar包,几乎所有的系统级应用都会使用到framework中hide的类、函数等,这是重中之重,也是最容易出问题的地方。