程序员Android开发Android 技术开发

编译调试Android系统原生App - 以Settings为例

2016-10-28  本文已影响6996人  imyyq_star

0、前言:

Android原生系统带有许多原生的App,比如浏览器、录音机、计算器、设置等,有些时候,我们需要用到一些系统的功能,或者是对已有的功能做二次开发,比如我上学时给一个公司做过一个Launcher和Wizard,就需要用到系统设置中的某些功能,比如Wifi、声音、显示等功能,于是就需要从Settings源码中提取出需要的功能。

特别是公司自己定制Android系统,需要在上面做一些系统级的App的时候,原生App已有的功能就可以通过编译其源码的方式直接拿过来改改就能用,而且可用度很高。

以下内容就以Settings为例,主要介绍如何编译和运行调试Settings源码。

1、源码:

这里有两种情况,分为原生的和公司定制的系统。无论是原生的还是定制的,类似于Settings这样需要使用到系统级或隐藏API的App,都需要系统签名文件和编译系统源码后得到相应的jar包才可以在IDE中编译,因为标准SDK根本没有那些API可供调用。

举个栗子:

(1)原生App:

网址:https://android.googlesource.com/
位置:platform/packages/apps/,可Ctrl+F搜索一下。点击想要编译的App,比如Settings。
使用Git克隆下来:比如 git clone https://android.googlesource.com/platform/packages/apps/Settings

需要额外的Jar就需要自己编译系统源码啦,这个是比较麻烦的,有兴趣可以试试自己编译定制自己的Android系统。

(2)定制:

  跟公司的底层工程师要代码。
  首先是“out/target/common/obj/JAVA_LIBRARIES/”文件夹,让底层人员整个文件夹压缩了给到你,虽然比较大(大概1G),但这是必须的,底层人员可能会说:你要什么再跟我说,扯淡,不要听他的,你就要全部。
  再来是要Settings的源码。

** 注意,既然是定制的,源码、jar、签名文件,还有系统都是一一对应的,你不能拿其他公司的系统签名来给你公司的系统app签名,这样无法运行的。 **

2、编译:

有了源码,下一步当然是要跑起来啦。

建议都使用Eclipse来编译,不要使用AS,因为AS编译大型的原生App能卡到你吐血,而且出错提示也不友好。但是用过AS的人都不想再碰Eclipse了有没有??别急,可以先用Eclipse编译过了,再贴到AS中,这样好很多,也很节省时间。

步骤:

初始化:

放入源码:

修正res错误:

修正src错误:

3、尝试运行:

编译通过了,试着直接debug跑一下,在安装进设备的时候,就会有以下错误:

报错:

4、调试

使用到系统级API的,或者AndroidManifest.xml文件中声明了

android:sharedUserId="android.uid.system"

那么没有系统签名,直接debug签名运行是不行的,需要向底层工程师要系统的签名文件,在源码目录
build\target\product\security
下的platform.pk8platform.x509.pem,如果你想看此次编译Settings是否已成功了,可以适当的在入口加一下Log,然后导出未签名的apk,使用系统签名进行签名后,放到/system/app/下替换掉Settings.apk,然后重启系统,打开设置,看看Logcat是否输出里加入的Log。

系统签名转换成debug签名进行调试:

在不知道系统签名可以转换成debug签名前,老实说我一直都是用Log的方式调试,太特么痛苦了。现在知道后整个人都懵逼了。

我们都希望可以像调试普通app那样调试系统app,以下是如何通过opensslplatform.pk8platform.x509.pem转换成debug.keystore文件:

三个命令

此方法来自:http://curlog.com/2016/08/30/android-pk2debug-keystore/

Mac自带openssl,Linux和Win需要安装。

然后就可以使用得到的debug签名配置到eclipse后愉快的调试啦,当然,得先把系统中已经存在的app先删除掉。然后重启系统,至于如何配置eclipse的debug签名,请Google。

5、结语:

使用过AS后,当然希望在AS中也可以调试系统App,抽空再写篇相关编译和调试的文章。如果这篇文章帮到你了,给个赞呗。

上一篇 下一篇

猜你喜欢

热点阅读