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代表显示隐藏目录
随机推荐
- 《Hands-On Machine Learning with Scikit-Learn&TensorFlow》mnist数据集错误及解决方案
最近在看这本书看到Chapter 3.Classification,是关于mnist数据集的分类,里面有个代码是 from sklearn.datasets import fetch_mldata m ...
- 自适应PC端网页制作使用REM
做一个PC端的网页,设计图是1920X1080的. 要在常见屏上显示正常(比例正确可) 1280X720 1366X768 1440X900 1920X1080 使用了几种办法 1.内容在一屏内显示的 ...
- 一个GD初二蒟蒻的自我介绍
emmm……今天博客第一天使用呢,好激动啊…… 这里是一个来自GD的初二蒟蒻+无脑OIER,什么都不会 NOIP2017普及组:260压线1=还是看RP过的…… GDKOI2018:120暴力大法吼啊 ...
- POJ--2104 K-th Number (主席树模版题)
题目链接 求区间第k大 #include<iostream> #include<cstring> #include<algorithm> #include<v ...
- window无法启动mongodb服务:系统找不到指定的文件错误的解决方法
原文:http://www.phperz.com/article/15/0530/131534.html 错误描述 错误2:系统找不到指定文件 思考过程 昨天做测试的时候,先后安装了两次MongoDB ...
- JVM源码分析之一个Java进程究竟能创建多少线程
JVM源码分析之一个Java进程究竟能创建多少线程 原创: 寒泉子 你假笨 2016-12-06 概述 虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从JVM源码角度来分析,更多的来自于L ...
- VSCode删除重复的空行
输入^\s\n 选择使用正则表达式
- windows蜜汁调音
哈,用的蜂鸣器,我静音了这东西还放. 只能调的很垃圾,但是很好玩. #include<cstdio> #include<windows.h> using namespace s ...
- 【洛谷P1059 明明的随机数】
题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着 ...
- Linux平台中使用PHP让word转pdf
1.ubantu下安装libreoffice sudo apt-get install libreoffice 2.命令行执行word转pdf 将 /home/wordToPdf/ ...