首页 > 编程知识 正文

如何生成apk文件,生成apk文件

时间:2023-05-04 14:47:45 阅读:251678 作者:4667

生成和运行apk文件相关的组件:

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

下面逐一说明:

项目的源文件结构如下:

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 FilesAndroidandroid-sdk-windowsplatformsandroid-7android.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 FilesAndroidandroid-sdk-windowsplatformsandroid-7android.jar” -d bin srcnetclaudxiaoexampleExample.java gennetclaudxiaoExampleR.java

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

3、将.class编译为classes.dex

dx.bat –dex –output=E:Examplebinclasses.dex E:Examplebin

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

4、将资源文件打包

aapt package -f -M AndroidManifest.xml -S res -A assets -I “E:Program FilesAndroidandroid-sdk-windowsplatformsandroid-7android.jar” -F binresources.ap_

-F指定输出的apk文件。

5、打包成未签名apk文件

apkbuilder.bat E:ExamplebinExample_unsigned.apk -u -z E:Examplebinresources.ap_ -f E:Examplebinclasses.dex -rf E:Examplesrc

这个命令的常用格式为:

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:Exampleandroid.keystore -storepass claudxiao -keypass claudxiao -signedjar E:ExamplebinExample.apk E:ExamplebinExample_unsigned.apk android.keystore

这个命令的常用格式为:

jarsigner -keystore ${keystore} -storepass ${keystore.password} -keypass ${keypass} -signedjar ${signed.apkfile} ${unsigned.apkfile} ${keyalias}

至此,binExample.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

8. 对齐

如果apk是Release模式,则必须使用zipalign工具进行对齐,对齐可减少内存使用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。