使用Android Studio开发系统性的应用(如闹钟)(多图)

时间:2021-11-14 16:46:47

前言

由于工作需要,需要在Android Studio中开发系统级别的应用。在把源码导入as的过程中摸了踩了很多坑,根据同事以前的成果以及自己的一些摸索,终于可以在as中开发系统级别的应用了,这里记录一下,方便你我他。

总结

总结一下,基本的步骤就是:
1、获取到源码以及根据Android.mk文件确定需要依赖的jar包、库等;
2、从编译源码输出的中间文件中寻找jar、库;
3、导入as之后,相关jar包、库的依赖;
4、一些重复资源的排查等,这些往往会引起编译不过的问题;
5、依赖framework.jar包,几乎所有的系统级应用都会使用到framework中hide的类、函数等,这是重中之重,也是最容易出问题的地方。

一、拿到系统应用的源码并分析android.mk文件

1、app源码路径

使用Android Studio开发系统性的应用(如闹钟)(多图)

如图,在packages/apps下可以拿到我们需要的app的源码。

使用Android Studio开发系统性的应用(如闹钟)(多图)

把该源码拷到我们本地目录上,然后分析并根据android.mk文件进行相关的导入工作。
android.mk文件可以参考:http://blog.sina.com.cn/s/blog_602f8770010148ce.html

2、分析android.mk文件

使用Android Studio开发系统性的应用(如闹钟)(多图)
如图,显示的是我们需要依赖的jar包以及库。datetimepicker、messageformat以及framework.jar需要我们到编译源码生成的中间文件中去找,其他的jar可以直接通过gradle依赖。这些jar包、依赖库的获取可以参考:http://blog.csdn.net/qq690197664/article/details/18223495

3、根据android.mk获取jar包及依赖的库

1、根据android.mk获取jar包

使用Android Studio开发系统性的应用(如闹钟)(多图)
如图可以在“out\target\common\obj\JAVA_LIBRARIES\framework_intermediates”目录下获取,把classes.jar改成你想要的名字即可,我为了识别,改为framework.jar。其他的jar包获取方式一样。

2、根据android.mk获取依赖库

需要依赖的库,android.mk文件中常常已经写明了获取的路径,如果找不到,多找找就是了,存在即合理。。。
如下图,给出了datetimepicker库的路径,该库,我们需要在as中通过Import Module的方式引入并依赖。
使用Android Studio开发系统性的应用(如闹钟)(多图)
路径:”..\MTK_Android7_S31N\mydroid\frameworks\opt\datetimepicker”

使用Android Studio开发系统性的应用(如闹钟)(多图)
把该工程拷贝到本地并且以module的方式引入工程并依赖

二、导入Android Studio中

拿到app源码并且准备好相关的jar包之后就可以进行着最关键的一步了。

1、导入到as中

1、这个,我们不断的next即可

使用Android Studio开发系统性的应用(如闹钟)(多图)

使用Android Studio开发系统性的应用(如闹钟)(多图)

使用Android Studio开发系统性的应用(如闹钟)(多图)

使用Android Studio开发系统性的应用(如闹钟)(多图)

2、导入,需要一定的时间。导入完成后,会有一个导入的说明性文件,提示我们导入过程as对文件做了什么改变等。可以删除。

使用Android Studio开发系统性的应用(如闹钟)(多图)

2、接下来就是依赖各种库了

1、依赖*库的jar包

这种jar是可以直接通过*库依赖的,我们像平时一般的第三方应用依赖一样操作即可。如图:
使用Android Studio开发系统性的应用(如闹钟)(多图)

2、依赖Android.mk中指明的datetimepicker库

使用Android Studio开发系统性的应用(如闹钟)(多图)

3、依赖framework.jar,并提高其优先级。这是关键一步!

需要依赖的module下创建lib文件夹,把framework.jar放入其中
使用Android Studio开发系统性的应用(如闹钟)(多图)

在project级别的build.gradle文件中加入如下语句,注意framework.jar的路径
使用Android Studio开发系统性的应用(如闹钟)(多图)

在project级别的build.gradle文件中加入如下语句,这里把framework.jar包的优先级提高到比SDK高
使用Android Studio开发系统性的应用(如闹钟)(多图)

三、总结

经过以上这些步骤,基本已经可以用Android Studio来进行系统级别的应用的开发了。总结一下,基本的步骤就是:
1、获取到源码以及根据Android.mk文件确定需要依赖的jar包、库等;
2、从编译源码输出的中间文件中寻找jar、库;
3、导入as之后,相关jar包、库的依赖;
4、一些重复资源的排查等,这些往往会引起编译不过的问题;
5、依赖framework.jar包,几乎所有的系统级应用都会使用到framework中hide的类、函数等,这是重中之重,也是最容易出问题的地方。