转 glee Alex 的专栏文章:
http://blog.csdn.net/qq690197664/article/details/18223495
目标:
1. 在eclipse环境下,编译Android原生的apk
2. 在eclipse环境下,做system系统签名的方法。(有很多,这里在windowsxp下做脚本处理)
前提:
1. 下载android源码;
2. 编译android源码;
以上两步网上有很多相关的资料,这里不做重复说明。
说明:
在eclipse环境下,要编译一个原生的apk是相当困难的。
但是还是有办法的,这里只做Java层的编译的说明,不做eclipse下C/C++的编译。
我们要去剖析Android源码编译APK的整个过程。
*.java文件 --》 *.class文件 --》 打包到 *.dex文件
所以还是生成了*.class文件的。Eclipse应用系统jar和第三方jar都是压缩 *.class文件。
目标1 搭建eclipse编译android原生APK环境
问题1:这些*.class文件在哪里呢?
编译源码过程中会生成很多的中间文件,在out\target\common\obj\JAVA_LIBRARIES 可以惊喜的发现很多android平台的Jar包,注意用压缩软件看看jar的详细内容,都是*.class
这里我们举出一个例子:
Ok,从图中你就可以看到相关的内容,注意要编译android源码后才能看到。这里不再啰嗦了。经过对比classes.jar classes-full-debug.jar classes-jarjar.jar 三个文件居然相同。
问题2:classes.jar classes-full-debug.jar classes-jarjar.jar三个文件在编译时的具体作用在这里不做说明。(有兴趣的朋友可以自己研究下)
问题3:怎么处理eclipse的环境,才能编译android原生的APK呢?
步骤如下:
1. 将android源码目录下out\target\common\obj\JAVA_LIBRARIES 的 classes.jar 或者
class-full-debug.jar拷贝到一个公共目录。
2. 将拷出的classes.jar 或者 class-full-debug.jar 修改为对应文件夹前缀的名字。
android.cts.dpi_intermediates classes-full-debug.jar --》android.cts.dpi.jar
省略掉_intermediates 后缀即可。(这个工作是个力气活,要多点耐心!!!!)
3. 在eclipse中导入Settings.apk源码.
目录 package/apps/Settings/****
问题来了,报了很多错红叉,不怕,接着来解决问题。
问题4:如何构建自己的eclipse的APK编译环境。
Settings工程目录上右键à Build Path à Add Library
点击User Libraries 按钮
增加自己的库名:android_system 并勾选 System library (added to the boot class path)
选中建立的android_system系统库,点击Add JARS按钮,找到第2步的文件夹,选中所有jar文件,打开,然后OK 确认。
Settings工程目录上右键 --》Build Path --》 Add Library
勾选android_system 按Finish按钮即可。
问题5:出现了两个系统库怎么处理?
需要将原生的Android 4.3移除。
移除的方法
Settings工程目录上右键à Build Path --》 Configure Build Path..
选中Android 4.3 点击右侧的Remove按钮。Ok搞定。
遇到的问题处理:
这种情况下,快捷键Ctrl + 1 点击上图的ClearAll Lint markers Ok
最后的结果:
目标2 eclipse下签名APK
步骤:
1. 建立sign目录
2. 拷贝签名文件 platform.pk8 platform.x509.pem
3. 签名signapk.jar
4. 创建signShell.bat文件
signShell.bat
脚本内容:
E:
cd E:\project\myeclipse\androidProject_hn_2013_1_07_ANT\Settings\bin
del Settings2.apk
java -jar ../sign/signapk.jar../sign/platform.x509.pem ../sign/platform.pk8 Settings.apk Settings2.apk
adb uninstall com.android.settings
adb install Settings2.apk
pause
双击的时候 signshell.bat的 open With à System Editor
5. AndroidManifest.xml 中 system权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.settings"
coreApp="true"
android:sharedUserId="android.uid.system">
所以顺序是运行Settings工程,在bin目录下生成了Settings.apk
点击signshell.bat 脚本,运行后生成签名后的Settings2.apk
Ok一切搞定。