Windows环境手动DOS命令构建apk文件
第一步 抽取资源id,生成R.java
aapt p[ackage] -f [-A <assets>] -S <res> -M <AndroidManifest.xml> -J <package> -I <android.jar>
参数-JPF决定aapt的输出: -J 输出R.java -P 输出公共资源索引public.xml -F 输出无字节码文件的apk
eg:
D:\Personal\Documents\GitHub\Login\src>aapt p -f -M .\AndroidManifest.xml -S .\res -J .\src\cn\login -I E:\Android\android-sdk\platforms\android-15\android.jar
第二步 生成.class,尽量指定javac版本
javac -target 6 -source 6 *.java
凡是有java源码的目录都要执行一下,包括R.java(尽量把R.java放到包对应的目录下)
eg:
D:\Personal\Documents\GitHub\Login\src\src\cn\login>javac -target 6 -source 6 *.java
第三步 生成.dex,需要使用dx.jar,可将其加入环境变量classpath中,不建议使用dx.bat脚本
java com.android.dx.command.Main --dex --output=<classes.dex> <dir> <!--将dir及其子目录下所有class文件打包为dex字节码文件-->
eg:
D:\Personal\Documents\GitHub\Login\src\src>java com.android.dx.command.Main --dex --output=..\bin\classes.dex .
经过以上步骤,得到classes.dex文件,这是最终版本,会被打包进入apk.
第四步 整合资源(AndroidManifest.xml及res目录下相关xml资源被加密,values目录下的索引资源被加密打包为resources.arsc)
aapt p[ackage] -f -M <AndroidManifest.xml> -S <res> -F <init.apk> -I <android.jar>
eg:
D:\Personal\Documents\GitHub\Login\src>aapt package -f -M .\AndroidManifest.xml -S .\res -F .\bin\init.apk -I E:\Android\android-sdk\platforms\android-15\android.jar
得到init.apk,这是一个仅缺少classesl.dex和签名的apk
第五步 添加classes.dex,这是一个简单的zip任务,命令apkbuilder使用到sdklib.jar的类com.android.sdklib.build.ApkBuilderMain.
java com.android.sdklib.build.ApkBuilderMain <out.apk> -v -u -z <init.apk> -f <classes.dex>
eg:
D:\Personal\Documents\GitHub\Login\src>java com.android.sdklib.build.ApkBuilderMain .\bin\out.apk -v -u -z .\bin\init.apk -f .\bin\classes.dex
第六步 签名,使用jdk工具jartool和jarsigner.
生成签名文件:
keytool -genkey -alias <user> -keyalg RSA -validity 36500 -keystore <android.keystore> <!--alias指定别名,是用户的标识-->
eg:
keytool -genkey -alias develon -keyalg RSA -validity 36500 -keystore .\bin\android.keystore
--此时会提示输入一些必要信息,确认时输入Y即可
签名:
jarsigner -verbose -keystore <android.keystore> -signedjar <signed.apk> <out.apk> <user>
eg:
D:\Personal\Documents\GitHub\Login\src>jarsigner -verbose -keystore .\bin\android.keystore -signedjar .\bin\signed.apk .\bin\out.apk develon
--此时需要输入密钥库口令和用户口令
现在,apk已经可以安装使用了
例子中的项目结构如下
D:\Personal\Documents\GitHub\Login\src
bin
-init.apk
-classes.dex
-out.apk
-android.keystore
-signed.apk
src
|--cn
|--login
-R.java
-LoginAct.java
-*.class
res
|--drawable
-ic_launcher.png
|--layout
-login_view.xml
|--values
-strings.xml
AndroidManifest.xml
build.bat
现在我们完全可以写一个批处理程序,来一步生成我们的apk文件,需要注意的是不要把各种目录混淆了.
build.bat的内容如下
@echo off %关闭回显%
D:
cd %~dp0 %进入项目根目录% %定义android.jar路径%
set ajar=E:\Android\android-sdk\platforms\android-15\android.jar %定义项目包名%
set pkg=cn\login echo 生成R.java文件
aapt p -M .\AndroidManifest.xml -A .\assets -S .\res -J .\src\%pkg% -I %ajar%
pause echo 生成JVM字节码文件
javac -target 6 -source 6 .\src\cn\login\*.java
pause echo 生成DalvikVM字节码文件并归档为classes.dex-^>需手动创建bin目录
java com.android.dx.command.Main --dex --output=.\bin\classes.dex .\src
pause echo 生成init.apk 不含字节码 未签名 不能安装
aapt p -f -M .\AndroidManifest.xml -A .\assets -S .\res -F .\bin\init.apk -I %ajar%
pause echo 添加字节码classes.dex-^>需将sdklib.jar添加到环境变量classpath中
java com.android.sdklib.build.ApkBuilderMain %cd%\bin\out.apk -v -d -u -z %cd%\bin\init.apk -f %cd% \bin\classes.dex
pause echo 签名out.apk-^>bin\signed.apk %签名密钥库android.keystore放到bin下%
jarsigner -verbose -keystore .\bin\android.keystore -signedjar .\bin\signed.apk .\bin\out.apk **
pause echo 任务完成
pause
点击+打开代码
效果大概就是这个样子

以上.
Windows环境手动DOS命令构建apk文件的更多相关文章
- windows下使用DOS命令删除大文件
首先进入DOS命令窗口: 1.进入到将要删除的目录: 执行命令: rmdir /s/q 文件夹名称 2.删除指定文件: 进入文件的目录下,找到要删除的文件名称+扩展名:例如111.jpg执行命令: d ...
- Windows 下通过DOS命令获取指定文件夹下所有文件的全路径
1.在你要获取路径的文件夹下 新建文本文档 (.txt) 文件, 2.输入以下内容保存 DIR *.* /S/B >LIST.TXT /s 表示递归 3. 将文件后缀改成 .bat 4.双击运行 ...
- windows 环境下dos 命令符下进D盘(非c盘系统盘)根目录
怎么进? 先 cd D: 然后 直接 D: 即可到D盘根目录,至于为啥要输入2遍D 才进D盘根目录,这就是windows的规定
- 浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍
浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍 前记 自己是搞编程的,首先我是一个菜鸟,接触计算机这么久了,感觉很多计算机方面的技术和知识朦朦胧胧.模模糊糊,貌似有些贻笑大方了:所 ...
- Windows下使用DOS命令进入MySQL数据库
先要配置环境变量 MYSQL_HOME : D:\mysql-8.0.11-winx64 Path:%MYSQL_HOME%\bin 1)新建MYSQL_HOME变量,并配置:C:\Program F ...
- Windows:使用Dos命令管理服务(Services)
Windows 服务器系列: Windows:查看IP地址,IP地址对应的机器名,占用的端口,以及占用该端口的应用程 Windows:使用Dos命令管理服务(Services) Windows:任务调 ...
- 停止、启动nginx以及在windows下使用dos命令停止占用的端口
windows下使用dos命令查看占用端口号并停止 windows+R打开命令窗口 查找占用端口对应的PID(进程号) netstat -ano|findstr "port" # ...
- Windows环境下用C#编程将文件上传至阿里云OSS笔记
Windows环境下用C#编程将文件上传至阿里云OSS笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/detai ...
- 【windows】dos命令查看某个文件夹下所有文件目录列表
dos命令 dir展示一个目录中的文件夹和文件列表 /a代表显示隐藏目录
随机推荐
- python3 函数function
def function(arg): pass 变量: 由字母.数字和下划线构成,不能以数字开头,不能任意特殊字符 变量定义规范,使用驼峰式或者下划线式格式 变量定义尽量简明,易懂,方便使用者应用 作 ...
- 如何改变Android标准键的颜色?
本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术,本文为大家讲解如何改变Android标准键的颜色 ...
- Nowcoder | [题解-N210]牛客OI月赛2-提高组
比赛连接戳这里^_^ 我才不会说这是我出的题(逃) 周赛题解\((2018.10.14)\) \(T1\) \(25\sim50\)分做法\(:\)直接爆搜 作为一个良心仁慈又可爱的出题人当然\(T1 ...
- 【转】STM32擦除内部FLASH时间过长导致IWDG复位分析
@20119-01-29 [小记] STM32擦除内部FLASH时间过长导致IWDG复位分析
- [IOI2014]holiday假期(分治+主席树)
题目描述 健佳正在制定下个假期去台湾的游玩计划.在这个假期,健佳将会在城市之间奔波,并且参观这些城市的景点.在台湾共有n个城市,它们全部位于一条高速公路上.这些城市连续地编号为0到n-1.对于城市i( ...
- ArcGIS for qml - 地址地标转换为经纬度(地理编码)
实现输入地址地标转换为其经纬度 本文链接:地理编码 作者: 狐狸家的鱼 Github: 八至 一.地理编码 1.地理编码含义 地址编码(或地理编码)是使用地址中包含的信息来插入地图上的相应位置的过程. ...
- apt could not get lock
很多次遇到,就是记不住. sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock sudo rm /var/lib/apt/li ...
- Django 项目内利用ORM直接运行脚本读库
#导包 import os import sys #将脚本所在工程添加到环境变量 #绝对路径 # sys.path.append('c:/Users/nxy/www/mymac') #相对路径 sys ...
- sublime中编辑服务器上的文件
背景:公司项目需要进行构建编译,在服务器上速度比较快,所以需要将sublime和linux中的文件相关联. 参考资料:http://zyan.cc/samba_linux_windows/ 主要有两步 ...
- 一个时间上的比较 if else
if (w<b.w) ; if (w>b.w) ; if (w<b.w) ; else if (w>b.w) ; 对于任何情况,执行的次数都是一样.只是对于汇编的代码,第二个方 ...