在Android开发的过程中会经常要修改系统包中的功能来满足自己或客户的功能需求。比如修改SystemUI 风格、添加或Settings.apk的设置选择等。本文主要记录了在修改这些功能之前要做的两件事:编译和安装。在eclipse工程编译能通过,并能将生成的Setting.apk能在系统上正常安装,这样你才能对源代码做功能修改。没有把这两件事做完,你去修改,是本墨倒置的做法。本文中Setting.apk的源代码是在Android4.1.2版本中提取出来。版本不一样,所需要jar包也有所差异。如有错误请指正。谢谢!
一、编译
(一)新建工程
1,提取Setting源码包
Setting.apk的源码包在:jb/packages/apps/Setting/下
2,在eclipse中新建一个工程。
3,将Settings源码包中的src目录、 res目录、AndroidManifest.xml文件替换刚新建的工程下的目录。替换之后“reflash“,会看到有N多的错误。
4,出现以上错误的原因是因为工程中缺少几个jar包。
缺少以下几个jar包:
以上三个包在系统中可以找到 jb/out/target/common/obj/JAVA_LIBRARIES/
android-common_intermediates
core_intermediates
framework_intermediates
在这三个目录下的classes.jar文件,就是我们所需的三个jar文件了。还有一个jar包在系统中找不到的(google-collections-1.0.jar),可以到这里去下:
http://download.csdn.net/detail/hp_2008/6745821
这些jar包添加到工程中这个XX的错误就会没有了。下面就是如何添加这些包。
(二)添加系统jar包
四个jar包按同样的文法添加,这里以一个为例。
1,选定工程名,点右键->选择properties弹出对话框,如图:
以上列表是我已添加了这些包的。如果你没有添加,这个列表中是没有这些东东的。根据图中的红圈一步一步往下走。
2,点击“Add Library...“出现以下对话框,如图:
3,点"Next>",出现以下对话框,如图:列表中的内容你应该是没有的。这是我已添加好了才有这些列表的。
4,点"User Libraries..“出现以下对话框:
5,上面列表中的名字就是在这里取名的,这个名是随便填,以自己看的懂为准。
6,OK后:
7,选择"random_name" 后,点"Add External JARs..",弹出对话框:
8,选定刚才的jar包。添加完之后,再看"random_name"下有对应的jar路径了。
9,点OK后出现以下对话框:
10,选择"random_name"再点"Finish",回到最早的那个主对话框,如图:
11,在上图中,列表中出现了我们刚才添加的:random_name"选项。这个时候再点上面的“Order and Export”栏,出现以下对话框:
把你所添加的列表放在最上面。点OK。
12,其它三个jar包的添加也是按上面的方式一样一步步的添加。添加完之后,没有错误了。如下图:
这样,第一件事的工作就做完了,没有错误,就可以编译出Settings.apk文件了。接下来就是把编译好的apk安装到系统中。
二、安装包
(一)安装不成功
1,安装出现以下错误,如图:
安装不成功的原因,是因为你自己编译的Setting.apk包的签名和系统中Settings.apk的签名不一致导致的结果。
2,解决方法:
在编译后的系统中找到系统的签名文件,对你自己编译的包进行重新签名。这几个Android中的系统签名文件可以在这里下载:
http://download.csdn.net/detail/hp_2008/6745849
下载后解压,放到工程中的bin目录下。如图所示:
里面有几个文件,有两个bat文件,这个点击可直接执行。如果不然执行的话,你要到“系统环境”中配置一下系统环境。文件列表如下图:
platform.pk8 platform.x509.pem等这些文件在out/target/...目录下可以找的到。自己可以find 一下。
(二)现在的Setting2.apk这个包就可以直接安装了。
安装成功后,字体所有变大,如图所示:
三、如果要编译其它系统包,以上方法同样适同。比如:Launcher2.apk等。
四、如何重新挂载系统及如何用adb启动apk
(1)挂载
mount -o remount /
mount -o remount, rw /
(2)命令启动APK
adb install apk路径完成apk应用的安装。
当手机安装完成apk之后,可以通过如下方法启动apk:
1.通过命令 adb shell am start pkg/.MainActivity
2.通过 adb shell monkey -p pkg -v 1
例: adb shell am start -n com.skypine.mainUI/com.skypine.mainUI.MainUIActivity
make snod 重新打包