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代表显示隐藏目录
随机推荐
- edit 控件之隐藏光标
@2019-02-22 [小记] 禁止聚焦功能便可实现
- [hexo]如何更换主题、删除文章
如何修改主题 hexo有很多主题,每个人可以选择自己喜欢的主题来应用,也可以自己设计主题并且上传形成公共主题供大家下载. 如果是自己设计主题的话,会稍微麻烦一些,需要自己配置很多文件,并且编写css以 ...
- 数组拆分I
题目描述 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最 ...
- 逆元(inv)
当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法: 设c是b的逆元,则有b*c≡1(mod m): 则(a/b)%m = (a/b)*1%m = (a/b)*b* ...
- HDU--4486 Task(贪心)
题目链接 4486 Task 按照时间从大到小排序 然后枚举所有的y值 用一个数组存储 符合要求就算上 #include<bits/stdc++.h> using namespace s ...
- QML学习笔记(六)- 简单计时器和定时器
做一个简单的qml计时器和定时器,左键触发计时,右键触发定时 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(六)- 简单计时器和定时器 左键点击按钮,触发计时器,中键可以暂停计时,同 ...
- SpringCloud第一弹(入门)
使用IDEA建立SpringBoot多模块工程不爽啊~算了凑合用吧. 第一步.建立一个POM工程 ..Next ..一路next即可,中间啥也不选 第二步.建立Eureka服务器(这个玩意等同于玩Du ...
- JS学习笔记Day1
一.JS概述 1.什么是JS? 是一种基于对象和事件驱动的客户端脚本语言: 运行环境:浏览器(通过浏览器解释执行) 2.JS产生于哪一年,哪个公司,是谁?第一个名字是什么? 1995年,网景公司.布兰 ...
- assert的使用
1.eclipse.myeclipse开启assert(断言),默认是关闭,如下: 说白了就是设置一下jvm的参数,参数是-ea或者-enableassertions 2.assert格式 (1)as ...
- go的net/rpc用法
一:PRC是什么? RPC(Remote Procedure Call) 远程过程调用,是一个计算通信协议.该协议允许一台计算机上的程序调用另外一台计算机上的程序.远程过程调用就是2个不在同一台计算机 ...