android编译apk文件,Android中.apk文件的编译流程

apk文件的编译流程图如下:

a4c26d1e5885305701be709a3d33442f.png

下面逐一说明:

项目的源文件结构如下:

E:\Example\

│ AndroidManifest.xml

├─assets

├─res

│ ├─drawable-hdpi

│ │ icon.png

│ │

│ ├─drawable-ldpi

│ │ icon.png

│ │

│ ├─drawable-mdpi

│ │ icon.png

│ │

│ ├─layout

│ │ main.xml

│ │

│ └─values

│ strings.xml

└─src

└─net

└─claudxiao

└─example

Example.java

1、从res生成R.java

mkdir gen

aapt package -f -m -J gen -S res -I “E:\Program

Files\Android\android-sdk-windows\platforms\android-7\android.jar”

-M AndroidManifest.xml

其中,-f将覆盖已有结果,-m -J

gen指定输出路径,-S指定资源文件目录,-I指定要包含的包,-M指定AndroidMenifest.xml文件。

2、将.java编译为.class

mkdir bin

javac -encoding GB18030 -target 1.6 -bootclasspath “E:\Program

Files\Android\android-sdk-windows\platforms\android-7\android.jar”

-d bin src\net\claudxiao\example\Example.java

gen\net\claudxiao\Example\R.java

其中,-target指定类文件的虚拟机版本,-bootclasspath覆盖引导类文件的位置,-d指定输出路径。

3、将.class编译为classes.dex

dx.bat –dex –output=E:\Example\bin\classes.dex

E:\Example\bin

注意这里必须用绝对路径。

4、将资源文件打包

aapt package -f -M AndroidManifest.xml -S res -A assets -I

“E:\Program

Files\Android\android-sdk-windows\platforms\android-7\android.jar”

-F bin\resources.ap_

-F指定输出的apk文件。

5、打包成未签名apk文件

apkbuilder.bat E:\Example\bin\Example_unsigned.apk -u -z

E:\Example\bin\resources.ap_ -f E:\Example\bin\classes.dex -rf

E:\Example\src

这个命令的常用格式为:

apkbuilder ${output.apk.file} -u -z ${packagedresource.file} -f

${dex.file} -rf ${source.dir} -rj ${libraries.dir}

参数必须使用绝对路径。

此外,运行后提示这一工具即将被废弃,但我没有找到新的替代工具是什么。

6、生成一个签名

keytool -genkey -alias android.keystore -keyalg RSA -validity

20000 -keystore android.keystore

当前目录下生成了一个android.keystore文件

7、对apk文件签名

jarsigner -keystore E:\Example\android.keystore -storepass

claudxiao -keypass claudxiao -signedjar E:\Example\bin\Example.apk

E:\Example\bin\Example_unsigned.apk android.keystore

这个命令的常用格式为:

jarsigner -keystore ${keystore} -storepass ${keystore.password}

-keypass ${keypass} -signedjar ${signed.apkfile}

${unsigned.apkfile} ${keyalias}

至此,bin\Example.apk就是一个可以安装的apk文件了。作为对比,现在的目录结构如下:

E:\Example\

│ android.keystore

│ AndroidManifest.xml

├─assets

├─bin

│ │ classes.dex

│ │ Example.apk

│ │ Example_unsigned.apk

│ │ resources.ap_

│ │

│ └─net

│ └─claudxiao

│ └─example

│ Example.class

│ R$attr.class

│ R$drawable.class

│ R$layout.class

│ R$string.class

│ R.class

├─gen

│ └─net

│ └─claudxiao

│ └─example

│ R.java

├─res

│ ├─drawable-hdpi

│ │ icon.png

│ │

│ ├─drawable-ldpi

│ │ icon.png

│ │

│ ├─drawable-mdpi

│ │ icon.png

│ │

│ ├─layout

│ │ main.xml

│ │

│ └─values

│ strings.xml

└─src

└─net

└─claudxiao

└─example

Example.java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值