目标:

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

这里我们举出一个例子:

 

android 源码编译需要ubuntu什么系统 原生安卓编译_应用

android 源码编译需要ubuntu什么系统 原生安卓编译_apk_02

 

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拷贝到一个公共目录。

android 源码编译需要ubuntu什么系统 原生安卓编译_apk_03

2.      将拷出的classes.jar 或者 class-full-debug.jar 修改为对应文件夹前缀的名字。

android.cts.dpi_intermediates   classes-full-debug.jar  --》android.cts.dpi.jar

省略掉_intermediates 后缀即可。(这个工作是个力气活,要多点耐心!!!!)

 

android 源码编译需要ubuntu什么系统 原生安卓编译_android平台_04

3.      在eclipse中导入Settings.apk源码.

目录  package/apps/Settings/****

android 源码编译需要ubuntu什么系统 原生安卓编译_eclipse_05

问题来了,报了很多错红叉,不怕,接着来解决问题。

 

问题4:如何构建自己的eclipse的APK编译环境。

Settings工程目录上右键à Build Path à  Add Library

 

android 源码编译需要ubuntu什么系统 原生安卓编译_应用_06

点击User Libraries 按钮

 

 

android 源码编译需要ubuntu什么系统 原生安卓编译_源码_07

 

 

 

  增加自己的库名:android_system  并勾选  System library (added to the boot class path)

android 源码编译需要ubuntu什么系统 原生安卓编译_源码_08

 

选中建立的android_system系统库,点击Add JARS按钮,找到第2步的文件夹,选中所有jar文件,打开,然后OK 确认。

 

android 源码编译需要ubuntu什么系统 原生安卓编译_源码_09

android 源码编译需要ubuntu什么系统 原生安卓编译_android平台_10

Settings工程目录上右键 --》Build Path --》  Add Library  

勾选android_system  按Finish按钮即可。

 

android 源码编译需要ubuntu什么系统 原生安卓编译_android平台_11

问题5:出现了两个系统库怎么处理?

需要将原生的Android 4.3移除。

 

android 源码编译需要ubuntu什么系统 原生安卓编译_源码_12

移除的方法

Settings工程目录上右键à Build Path --》 Configure Build Path..

选中Android 4.3 点击右侧的Remove按钮。Ok搞定。

 

android 源码编译需要ubuntu什么系统 原生安卓编译_eclipse_13

 

 

遇到的问题处理:

 

android 源码编译需要ubuntu什么系统 原生安卓编译_eclipse_14

这种情况下,快捷键Ctrl + 1   点击上图的ClearAll Lint markers  Ok

 

最后的结果:

 

android 源码编译需要ubuntu什么系统 原生安卓编译_源码_15

 

目标2 eclipse下签名APK

 

android 源码编译需要ubuntu什么系统 原生安卓编译_eclipse_16

步骤:

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一切搞定。