手动编译APK的流程
来源:互联网 发布:淘宝卖家后台在哪里 编辑:程序博客网 时间:2024/05/10 16:44
备注:android sdk版本不同,安装之后在tools下可能会少dx.bat,apkbuilder.bat文件,通过升级SDK或者单独下载放在对应的目录,也可正常使用;
一、手动编译APK的流程如下:
1.生成资源文件:使用Android SDK提供的aapt.exe生成R.java类文件
2.编译本地库:使用Android SDK提供的aidl.exe把.aidl转成.java文件(如果没有aidl,则跳过这一步)
3.编译java代码:使用JDK提供的javac.exe编译.java类文件生成class文件
4.生成dex文件:使用Android SDK提供的dx.bat命令行脚本生成classes.dex文件
5.打包资源文件:使用Android SDK提供的aapt.exe生成资源包文件(包括res、assets、androidmanifest.xml等)
6.生成apk文件:使用Android SDK提供的apkbuilder.bat生成未签名的apk安装文件
7.对apk文件进行签名:使用jdk的jarsigner.exe对未签名的包进行apk签名
二、详细步骤
1)、准备工作
A、安装好JDK,配置环境变量;
B、将android-sdk-windows\platform-tools和 android-sdk-windows\tools 添加到CLASSPATH 环境变量中;
C、打开CMD命令行界面,将当前目录切换到工程所在目录;
D、准备一个目录,以下例子是以在eclipse中创建的Android test project项目,名称Test;
2)生成资源文件,使用aapt生成R.java类文件,aapt所在路径android-sdk-windows\platform-tools\aapt.exe:
E:\Users\Administrator\workspace\Test>aapt package -f -m -J gen -S res -M AndroidManifest.xml -I E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar
说明:
-f -m -J gen 代表按覆盖的形式在gen目录下生成带包路径的R.java;
-f force overwrite of existing files;
-m make package directories under location specified by -J
-J specify where to output R.java resource constant definitions
-J后面跟的是生成目录;-S后面跟的是资源目录;-M后面跟的是AndroidManifest.xml;-I后面跟的是使用的AndroidAPI的jar;
3)javac.exe编译.java类文件生成class文件,javac所在路径C:\Program Files\Java\jdk1.6.0_43\bin\javac.exe
E:\Users\Administrator\workspace\Test>javac -encoding utf-8 -target 1.6 -d bin -bootclasspath E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar gen\android\support\v7\appcompat\test\*.java src\android\support\v7\appcompat\test\*.java
说明:-target:jdk版本;-d:指定生成的class类文件存放的位置;-bootclasspath:覆盖引导类文件的位置;-encoding:后面跟字符编码,避免出现乱码;
4)使用dx.bat命令行脚本生成classes.dex文件,dx.bat所在路径android-sdk-windows\tools\dx.bat
E:\Users\Administrator\workspace\Test>dx.bat --dex --output=E:\Users\Administrator\workspace\Test\bin\classes.dex E:\Users\Administrator\workspace\Test\bin\classes
说明:--output:生成的dex文件存放路径;最后带上class文件所在目录,不需要加包目录
5)使用aapt.exe生成资源包文件,aapt.exe所在路径android-sdk_r23.0.2-windows\android-sdk-windows\platform-tools\aapt.exe
E:\Users\Administrator\workspace\Test>aapt.exe package -f -M AndroidManifest.xml -S res -A assets -I E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar -F bin\resourcesLater
说明:-S:资源目录;-M:AndroidManifest.xml文件;-I:导入用的jar文件;-F:后面跟生成的资源文件存放位置,生成的资源文件名是自己新建的
6)使用apkbuilder.bat生成未签名的apk安装文件,apkbuilder.bat所在路径android-sdk_r23.0.2-windows\android-sdk-windows\tools\apkbuilder.bat。
(使用该命令时:会提示该工具已过时,Google不推荐使用。而推荐使用的是:com.android.ant.ApkBuilderTask,但apk仍能成功生成)
E:\Users\Administrator\workspace\Test>apkbuilder E:\Users\Administrator\workspace\Test\bin\HelloWorld.apk -u -z E:\Users\Administrator\workspace\Test\bin\resourcesLater -f E:\Users\Administrator\workspace\Test\bin\classes.dex -rf E:\Users\Administrator\workspace\Test\src
THIS TOOL IS DEPRECATED. See --help for more information.
说明:-z:资源打包文件;-f:类打包文件;-rf:源代码目录;
(备注:此步骤没有成功给apk签名)
7)使用jarsigner.exe对未签名的包进行apk签名,jarsigner.exe所在路径C:\Program Files\Java\jdk1.6.0_43\bin\jarsigner.exe
E:\Users\Administrator\workspace\Test>jarsigner -verbose -keystore E:\Users\zhengshu_apk -signedjar E:\Users\Administrator\workspace\Test\bin\HelloWorld.apk E:\Users\Administrator\workspace\Test\bin\HelloWorld.apk.mydeystore
说明:-keystore:keystore文件;-signedjar:签名后的文件;后面还有未签名文件和key的alias
用法:jarsigner [选项] jar 文件别名
jarsigner -verify [选项] jar 文件
[-keystore <url>] 密钥库位置
[-storepass <口令>] 用于密钥库完整性的口令
[-storetype <类型>] 密钥库类型
[-keypass <口令>] 专用密钥的口令(如果不同)
[-sigfile <文件>] .SF/.DSA 文件的名称
[-signedjar <文件>] 已签名的 JAR 文件的名称
[-digestalg <算法>] 摘要算法的名称
[-sigalg <算法>] 签名算法的名称
[-verify] 验证已签名的 JAR 文件
[-verbose] 签名/验证时输出详细信息
[-certs] 输出详细信息和验证时显示证书
[-tsa <url>] 时间戳机构的位置
[-tsacert <别名>] 时间戳机构的公共密钥证书
[-altsigner <类>] 替代的签名机制的类名
[-altsignerpath <路径列表>] 替代的签名机制的位置
[-internalsf] 在签名块内包含 .SF 文件
[-sectionsonly] 不计算整个清单的散列
[-protected] 密钥库已保护验证路径
[-providerName <名称>] 提供者名称
[-providerClass <类> 加密服务提供者的名称
[-providerArg <参数>]] ... 主类文件和构造函数参数
E:\Users\Administrator\workspace\Test>
一、手动编译APK的流程如下:
1.生成资源文件:使用Android SDK提供的aapt.exe生成R.java类文件
2.编译本地库:使用Android SDK提供的aidl.exe把.aidl转成.java文件(如果没有aidl,则跳过这一步)
3.编译java代码:使用JDK提供的javac.exe编译.java类文件生成class文件
4.生成dex文件:使用Android SDK提供的dx.bat命令行脚本生成classes.dex文件
5.打包资源文件:使用Android SDK提供的aapt.exe生成资源包文件(包括res、assets、androidmanifest.xml等)
6.生成apk文件:使用Android SDK提供的apkbuilder.bat生成未签名的apk安装文件
7.对apk文件进行签名:使用jdk的jarsigner.exe对未签名的包进行apk签名
二、详细步骤
1)、准备工作
A、安装好JDK,配置环境变量;
B、将android-sdk-windows\platform-tools和 android-sdk-windows\tools 添加到CLASSPATH 环境变量中;
C、打开CMD命令行界面,将当前目录切换到工程所在目录;
D、准备一个目录,以下例子是以在eclipse中创建的Android test project项目,名称Test;
2)生成资源文件,使用aapt生成R.java类文件,aapt所在路径android-sdk-windows\platform-tools\aapt.exe:
E:\Users\Administrator\workspace\Test>aapt package -f -m -J gen -S res -M AndroidManifest.xml -I E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar
说明:
-f -m -J gen 代表按覆盖的形式在gen目录下生成带包路径的R.java;
-f force overwrite of existing files;
-m make package directories under location specified by -J
-J specify where to output R.java resource constant definitions
-J后面跟的是生成目录;-S后面跟的是资源目录;-M后面跟的是AndroidManifest.xml;-I后面跟的是使用的AndroidAPI的jar;
3)javac.exe编译.java类文件生成class文件,javac所在路径C:\Program Files\Java\jdk1.6.0_43\bin\javac.exe
E:\Users\Administrator\workspace\Test>javac -encoding utf-8 -target 1.6 -d bin -bootclasspath E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar gen\android\support\v7\appcompat\test\*.java src\android\support\v7\appcompat\test\*.java
说明:-target:jdk版本;-d:指定生成的class类文件存放的位置;-bootclasspath:覆盖引导类文件的位置;-encoding:后面跟字符编码,避免出现乱码;
4)使用dx.bat命令行脚本生成classes.dex文件,dx.bat所在路径android-sdk-windows\tools\dx.bat
E:\Users\Administrator\workspace\Test>dx.bat --dex --output=E:\Users\Administrator\workspace\Test\bin\classes.dex E:\Users\Administrator\workspace\Test\bin\classes
说明:--output:生成的dex文件存放路径;最后带上class文件所在目录,不需要加包目录
5)使用aapt.exe生成资源包文件,aapt.exe所在路径android-sdk_r23.0.2-windows\android-sdk-windows\platform-tools\aapt.exe
E:\Users\Administrator\workspace\Test>aapt.exe package -f -M AndroidManifest.xml -S res -A assets -I E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar -F bin\resourcesLater
说明:-S:资源目录;-M:AndroidManifest.xml文件;-I:导入用的jar文件;-F:后面跟生成的资源文件存放位置,生成的资源文件名是自己新建的
6)使用apkbuilder.bat生成未签名的apk安装文件,apkbuilder.bat所在路径android-sdk_r23.0.2-windows\android-sdk-windows\tools\apkbuilder.bat。
(使用该命令时:会提示该工具已过时,Google不推荐使用。而推荐使用的是:com.android.ant.ApkBuilderTask,但apk仍能成功生成)
E:\Users\Administrator\workspace\Test>apkbuilder E:\Users\Administrator\workspace\Test\bin\HelloWorld.apk -u -z E:\Users\Administrator\workspace\Test\bin\resourcesLater -f E:\Users\Administrator\workspace\Test\bin\classes.dex -rf E:\Users\Administrator\workspace\Test\src
THIS TOOL IS DEPRECATED. See --help for more information.
说明:-z:资源打包文件;-f:类打包文件;-rf:源代码目录;
(备注:此步骤没有成功给apk签名)
7)使用jarsigner.exe对未签名的包进行apk签名,jarsigner.exe所在路径C:\Program Files\Java\jdk1.6.0_43\bin\jarsigner.exe
E:\Users\Administrator\workspace\Test>jarsigner -verbose -keystore E:\Users\zhengshu_apk -signedjar E:\Users\Administrator\workspace\Test\bin\HelloWorld.apk E:\Users\Administrator\workspace\Test\bin\HelloWorld.apk.mydeystore
说明:-keystore:keystore文件;-signedjar:签名后的文件;后面还有未签名文件和key的alias
用法:jarsigner [选项] jar 文件别名
jarsigner -verify [选项] jar 文件
[-keystore <url>] 密钥库位置
[-storepass <口令>] 用于密钥库完整性的口令
[-storetype <类型>] 密钥库类型
[-keypass <口令>] 专用密钥的口令(如果不同)
[-sigfile <文件>] .SF/.DSA 文件的名称
[-signedjar <文件>] 已签名的 JAR 文件的名称
[-digestalg <算法>] 摘要算法的名称
[-sigalg <算法>] 签名算法的名称
[-verify] 验证已签名的 JAR 文件
[-verbose] 签名/验证时输出详细信息
[-certs] 输出详细信息和验证时显示证书
[-tsa <url>] 时间戳机构的位置
[-tsacert <别名>] 时间戳机构的公共密钥证书
[-altsigner <类>] 替代的签名机制的类名
[-altsignerpath <路径列表>] 替代的签名机制的位置
[-internalsf] 在签名块内包含 .SF 文件
[-sectionsonly] 不计算整个清单的散列
[-protected] 密钥库已保护验证路径
[-providerName <名称>] 提供者名称
[-providerClass <类> 加密服务提供者的名称
[-providerArg <参数>]] ... 主类文件和构造函数参数
E:\Users\Administrator\workspace\Test>
0 0
- 手动编译APK的流程
- android APK手动编译流程
- APK 的编译流程
- APK手动编译全过程
- Android中.apk文件的编译流程
- Android中.apk文件的编译流程
- apk的文件结构 及编译流程
- Android中.apk文件的编译流程
- apk编译流程
- Ant进行手动编译打包apk
- 手动编译和签名打包apk文件
- 命令行手动编译打包Android apk
- Android手动编译生成apk安装文件
- Android APK 编译打包流程
- 如何手动完成一次APK打包?----APK编译全过程
- 如何手动完成一次APK打包?----APK编译全过程
- 用gradle手动编译出android的简单的apk文件(gradle学习之路二)
- Android的编译、打包流程以及手动打包编译的方法
- repo sync时出现contains uncommitted changes的错误提示
- mysql数据库的汉字乱码问题
- [Leetcode]Kth Largest Element in an Array
- Command Pattern
- CentOS上 svn客户端的安装及应用
- 手动编译APK的流程
- Java学习笔记---流程控制语句
- OPENGL学习(一)
- 安卓自定义状态栏颜色以与APP风格保持一致
- HDU 1548 A strange lift (简单最短路或BFS)
- JVM命令行选项及GC日志
- 笨笨调试C程序
- OpenVAS漏洞扫描基础教程之创建用户
- MVC,MVP 和 MVVM 的图示