手把手教你纯命令行打包apk
2016-05-22 11:20
239 查看
我使用的环境变量的配置:
Jdk1.6\bin
Sdk\tools
第一部分:通过命令行创建简单的android项目
1.在创建安卓项目的目录中打开命令行窗口
2.在命令行窗口中输入命令(命令写在一行上)
>android create project
--target <target_ID>
--name <项目名称>
--path <项目的路径>
--activity <Activity的名称>
--package <项目的包名>
android create project --target7--nameDemo
--path D:\Z_test\Demo--activity MainActivity--packagecom.demo.www
注:1.不知道的命令可以使用 >android --help来查看
2.target_ID指的是当前拥有的API的id号,使用命令>android
list target 来查看
3.接下来进入项目中进行操作 >cd Demo
第二部分:命令行打包(有的目录没有随着安卓项目的创建而创建,需要手动创建,使用命令>mkdir <文件名>)
1.生成R.java文件
a.创建gen目录>mkdir gen 这是在当前项目的目录下的命令行,所以直接输入想起的文件名就可以了,绝对路径也是可以
b.运行aapt命令生成R.java文件
>aapt package -f -m -J gen -S res -I E:\sdk\platforms\android-19\android.jar -M AndroidManifest.xml
2.将java文件编译成class文件
>javac -encoding UTF-8 -target 1.6 -bootclasspath E:\sdk\platforms\android-19\android.jar -d bin src\com\demo\www\*.java gen\com\demo\www\R.java
注:a.-target 1.6 是指jdk的版本,经验是使用1.6的编译dex时不会出现问题,使用1.7就不能编译成功
b.-d bin src\com\demo\www\*.java -d 表示指定存放生成的class文件的位置,后面就是要编译的java文件
3.生成dex文件(注意:使用绝对路径)
>dx --dex --output=D:\Z_test\Demo\bin\classes.dex D:\Z_test\Demo\bin
注:前面是dex文件 ,后面是操作的目录,也就是存放到的目录
4.生成资源包文件
>aapt package -f -M AndroidManifest.xml -S res -A assets -I E:\sdk\platforms\android-19\android.jar -F bin\resources
5.生成未签名的apk包(sdk3.0以后将apkbuilder删除了)
>java -cp E:\sdk\tools\lib\sdklib.jar com.android.sdklib.build.ApkBuilderMain Demo.apk -v -u -z bin\resources -f bin\classes.dex -rf src
效果:
第三部分:命令行生成签名文件
>keytool -genkey -alias key_demo.keystore -keyalg RSA -validity 20000 -keystore key_demo.keystore
注:文件夹下的key_demo.keystore就是我们需要的签名文件 20000表示证书的有效天数
第四部分:用生成的签名文件对未签名的apk进行签名(jdk一定要是1.6,)
>jarsigner -verbose -keystore key_demo.keystore -signedjar demo_signed.apk D:\Z_test\Demo\demo.apk key_demo.keystore
我在使用jdk为1.7时,签名后会出现以下警告:
警告:
未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期
日期 (2063-07-18) 或以后的任何撤销日期之后, 用户可能无法验证此 jar。
第五部:最后验证是否签名成功
>jarsigner -verify demo_signed.apk
Jdk1.6\bin
Sdk\tools
第一部分:通过命令行创建简单的android项目
1.在创建安卓项目的目录中打开命令行窗口
2.在命令行窗口中输入命令(命令写在一行上)
>android create project
--target <target_ID>
--name <项目名称>
--path <项目的路径>
--activity <Activity的名称>
--package <项目的包名>
android create project --target7--nameDemo
--path D:\Z_test\Demo--activity MainActivity--packagecom.demo.www
注:1.不知道的命令可以使用 >android --help来查看
2.target_ID指的是当前拥有的API的id号,使用命令>android
list target 来查看
3.接下来进入项目中进行操作 >cd Demo
第二部分:命令行打包(有的目录没有随着安卓项目的创建而创建,需要手动创建,使用命令>mkdir <文件名>)
1.生成R.java文件
a.创建gen目录>mkdir gen 这是在当前项目的目录下的命令行,所以直接输入想起的文件名就可以了,绝对路径也是可以
b.运行aapt命令生成R.java文件
>aapt package -f -m -J gen -S res -I E:\sdk\platforms\android-19\android.jar -M AndroidManifest.xml
2.将java文件编译成class文件
>javac -encoding UTF-8 -target 1.6 -bootclasspath E:\sdk\platforms\android-19\android.jar -d bin src\com\demo\www\*.java gen\com\demo\www\R.java
注:a.-target 1.6 是指jdk的版本,经验是使用1.6的编译dex时不会出现问题,使用1.7就不能编译成功
b.-d bin src\com\demo\www\*.java -d 表示指定存放生成的class文件的位置,后面就是要编译的java文件
3.生成dex文件(注意:使用绝对路径)
>dx --dex --output=D:\Z_test\Demo\bin\classes.dex D:\Z_test\Demo\bin
注:前面是dex文件 ,后面是操作的目录,也就是存放到的目录
4.生成资源包文件
>aapt package -f -M AndroidManifest.xml -S res -A assets -I E:\sdk\platforms\android-19\android.jar -F bin\resources
5.生成未签名的apk包(sdk3.0以后将apkbuilder删除了)
>java -cp E:\sdk\tools\lib\sdklib.jar com.android.sdklib.build.ApkBuilderMain Demo.apk -v -u -z bin\resources -f bin\classes.dex -rf src
效果:
第三部分:命令行生成签名文件
>keytool -genkey -alias key_demo.keystore -keyalg RSA -validity 20000 -keystore key_demo.keystore
注:文件夹下的key_demo.keystore就是我们需要的签名文件 20000表示证书的有效天数
第四部分:用生成的签名文件对未签名的apk进行签名(jdk一定要是1.6,)
>jarsigner -verbose -keystore key_demo.keystore -signedjar demo_signed.apk D:\Z_test\Demo\demo.apk key_demo.keystore
我在使用jdk为1.7时,签名后会出现以下警告:
警告:
未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期
日期 (2063-07-18) 或以后的任何撤销日期之后, 用户可能无法验证此 jar。
第五部:最后验证是否签名成功
>jarsigner -verify demo_signed.apk
相关文章推荐
- tomcat中不同项目共享session数据
- PAT 1042. 字符统计(20)
- 项目中应用Redis+Php的场景
- 说大学毕业等于失业?你是不是傻!
- 分层开发(MySchool总结)
- 117. Populating Next Right Pointers in Each Node II
- spark PIPELINE 的交叉验证
- 推荐几个在线PDF转化成Word网站
- 数据集
- hdu1227 Fast Food
- 从SEO角度出发,我们应该禁止搜索引擎对网站分页的抓取
- 通过getSystemServices获取手机管理大全
- Android之使用JDBC连接数据库-使用jtds连接mySQL
- 训练3 习题1
- find_package openni 出错解决方法
- Linux下安装配置Redis
- nginx 工作原理
- python中的三个读read(),readline()和readlines()
- SCA(服务组件架构)编程模式
- 1017 Problem Q