Android中APK打包流程
aapt: android application package tool,SDK
#Android打包流程
aapt package -f -m -J [gen目录] -S [res目录] -I [android.jar目录] -M [AndroidManifest.xml目录]
aidl -I[src目录] -p[aidl框架环境文件(framework.aidl)] -o[aidl输出目录(gen)] [要转换的aidl文件(your.aidl)]
javac -encoding [编码] -target [版本(1.6 or 1.7)] -bootclasspath [android.jar] -cp [依赖的jar(多个用;隔开;结尾)] -d [class文件输出目录] [要编译的java文件(多个用空格分开)]
jar xvf [jar文件]
dx.bat --dex --output=[全路径的输出文件(classes.dex)] [全路径的class文件对应的目录]
aapt package -f -M [清单文件(AndroidManifest.xml)] -S [资源文件目录(res)] -A [资产文件目录(assets)] -I [android环境jar(android.jar)] -F [输出的文件(resoures.ap_)]
apkbuilder [apk输出路径] -u -z [打包好的资源文件全路径] -f [全路径dex文件] -rf [src全路径] -rj [全路径的libs目录]
keytool -genkeypair -alias zdc -keyalg RSA -validity 3650 -keypass 123456 -storepass 123456 -keystore zdc.keystore
jarsigner -keystore 签名文件 -keypass 签名密码 -storepass 签名文件的密码 -signedjar 生成的签名文件 未签名的文件 签名的别名
# 命令详解
#指令打包之R文件生成
aapt package -f -m -J gen -S res -I ...\sdk\platforms\android-16\android.jar -M AndroidManifest.xml
#.aidl转java文件
aidl -Isrc -pD:\...\sdk\platforms\android-16\framework.aidl -ogen 项目路径\src\aidl目录\ITelephony.aidl
#指令打包之java转class
javac -encoding utf-8 -bootclasspath D:\...\sdk\platforms\android-16\android.jar -cp libs\android-support-v4.jar; -d bin\classes .\gen\cn\zdc\packagedemo\R.java
jar xvf ..\..\libs\nineoldandroids-2.4.0.jar
#指令打包之class转dex
dx --dex --output=项目路径\bin\classes.dex 项目路径\bin\classes
#指令打包之生成未签名的apk
aapt package -f -M AndroidManifest.xml -S res -A assets -I D:\...\sdk\platforms\android-16\android.jar -F bin\resources.ap_
apkbuilder 项目路径\bin\mobliesafe.apk -u -z 项目路径\bin\resources.ap_ -f 项目路径\bin\classes.dex -rf 项目路径\src -rj 项目路径\libs
#指令打包之生成签名的apk
keytool -genkeypair -alias zdc -keyalg RSA -validity 3650 -keypass 123456 -storepass 123456 -keystore zdc.keystore
jarsigner -keystore zdc.keystore -keypass 123456 -storepass 123456 -signedjar bin\mobliesafe_signed.apk bin\mobliesafe.apk zdc
#ant介绍
#ant基本操作
project根标签
name: 项目名称。必填
baseDir: 指定当前目录。(选填)
default: 默认执行的任务。 (选填)
Target任务标签
name: 任务名称。必填
echo输出打印标签
message:指定打印的内容
示例:
<?xml version="1.0" encoding="utf-8"?>
<project name="test01">
<target name="helloworld">
<echo message="Hello World"></echo>
</target>
</project>
示例:
<project name="test01" default="helloworld">
<target name="helloworld">
<echo message="Hello World"></echo>
</target>
</project>
示例:
<project name="test01" default="helloworld">
<target name="helloworld">
<echo message="Hello World"></echo>
<echo message="${basedir}"></echo>
</target>
</project>
示例:
<project name="test01" default="helloworld">
<target name="helloworld">
<echo message="Hello World"></echo>
</target>
<target name="printdir" depends="helloworld">
<echo message="${basedir}"></echo>
</target>
</project>
示例:
<project name="test01" default="helloworld">
<target name="helloworld">
<echo message="Hello World"></echo>
</target>
<target name="printdir" depends="helloworld">
<echo message="${basedir}"></echo>
</target>
<target name="helloAndroid" depends="helloworld,printdir">
<echo message="helloAndroid"></echo>
</target>
</project>
#ant的文件操作
示例:
<project name="test02">
<target name="mkdir">
<mkdir dir="hehe"></mkdir>
</target>
</project>
示例:
<project name="test02">
<target name="deldir">
<delete dir="hehe"></delete>
</target>
</project>
创建文件test.txt
示例:
<project name="test02">
<target name="delfile">
<delete file="test.txt"></delete>
</target>
</project>
file:文件的名称
#ant执行javac指令
<project name="test03">
<target name="javac">
<javac>
<src path="."/>
<exclude name="Test.java"/>
<exclude name="Test1.java"/>
</javac>
</target>
</project>
#ant打包手机卫士
<!-- 创建R文件存放的目录 -->
<target name="init">
<!-- 当下次调用的时候,要将文件目录删除,重新创建 -->
<delete dir="${builddir}"></delete>
<!-- 创建build\gen -->
<mkdir dir="${gendir}"/>
</target>
<property name="builddir" location="${basedir}/build"/>
<property name="gendir" location="${builddir}/gen" />
示例:
<property environment="env"/>
<property name="sdkhome" location="${env.SDK_HOME}"/>
<property name="aapt" location="${sdkhome}/build-tools/19.1.0/aapt.exe"/>
environment : 表示设置环境变量的标示
<!-- 创建R文件思路:
1.找到aapt
2.运行aapt指令:aapt package -f -m -J gen -S res -I d:\...\sdk\platforms\android-14\android.jar -M AndroidManifest.xml-->
<target name="genR" depends="init">
<exec executable="${aapt}">
<arg value="package"></arg>
<arg value="-f"></arg>
<arg value="-m"></arg>
<arg value="-J"></arg>
<arg value="${gendir}"></arg>
<arg value="-S"></arg>
<arg value="${resdir}"></arg>
<arg value="-I"></arg>
<arg value="${androidjar}"></arg>
<arg value="-M"></arg>
<arg value="${manifest}"></arg>
</exec>
</target>
<!-- 创建R文件2:设置各种目录 -->
<!-- res -->
<property name="resdir" location="${basedir}/res"></property>
<!-- android.jar -->
<property name="androidjar" location="${sdkhome}/platforms/android-14/android.jar"></property>
<!-- AndroidManifest.xml -->
<property name="manifest" location="${basedir}/AndroidManifest.xml"></property>
<property name="aidl" location="${sdkhome}/build-tools/19.1.0/aidl.exe"></property>
<target name="aidltojava" depends="mkR">
<apply executable="${aidl}">
<arg value="-I${srcdir}"/>
<arg value="-p${frameworkaidl}"/>
<arg value="-o${gendir}"/>
<fileset dir="${srcdir}" includes="**/*.aidl"/>
</apply>
</target>
<property name="srcdir" location="${basedir}/src"></property>
<!-- framwork.aidl -->
<property name="frameworkaidl" location="${sdkhome}/platforms/android-14/framework.aidl"></property>
<target name="init">
<delete dir="${builddir}"></delete>
<mkdir dir="${gendir}"/>
<mkdir dir="${classesdir}"></mkdir>
</target>
<target name="javattoclass" depends="aidltojava">
<javac encoding="utf-8" bootclasspath="${androidjar}" destdir="${classesdir}">
<classpath>
<fileset dir="${lisbsdir}" includes="**/*.jar"></fileset>
</classpath>
<src path="${srcdir}"></src>
<src path="${gendir}"></src>
</javac>
</target>
<property name="lisbsdir" location="${basedir}/libs"></property>
<property name="classesdir" location="${builddir}/classes"></property>
<target name="unjar" depends="javattoclass">
<unjar dest="${classesdir}">
<fileset dir="${lisbsdir}" includes="**/*.jar"></fileset>
</unjar>
</target>
<property name="dx" location="${sdkhome}/platform-tools/dx.bat"></property>
<target name="classtodex" depends="unjar">
<exec executable="${dx}">
<arg value="--dex"></arg>
<arg value="--output=${classesdex}"></arg>
<arg value="${classesdir}"></arg>
</exec>
</target>
<property name="classesdex" location="${builddir}/classes.dex"></property>
<target name="restoresources" depends="classtodex">
<exec executable="${aapt}">
<arg value="package"></arg>
<arg value="-f"></arg>
<arg value="-M"></arg>
<arg value="${manifest}"></arg>
<arg value="-S"></arg>
<arg value="${resdir}"></arg>
<arg value="-A"></arg>
<arg value="${assetsdir}"></arg>
<arg value="-I"></arg>
<arg value="${androidjar}"></arg>
<arg value="-F"></arg>
<arg value="${resourcesap}"></arg>
</exec>
</target>
<property name="assetsdir" location="${basedir}/assets"></property>
<property name="resourcesap" location="${builddir}/resources.ap_"></property>
<property name="apkbuilder" location="${sdkhome}/tools/apkbuilder.bat"></property>
<target name="unsignedapk" depends="restoresources">
<exec executable="${apkbuilder}">
<arg value="${unsingedapk}"></arg>
<arg value="-u"></arg>
<arg value="-z"></arg>
<arg value="${resourcesap}"></arg>
<arg value="-f"></arg>
<arg value="${classesdex}"></arg>
<arg value="-rf"></arg>
<arg value="${srcdir}"></arg>
<arg value="-rj"></arg>
<arg value="lisbsdir"></arg>
</exec>
</target>
<property name="unsingedapk" location="${builddir}/mobliesafe_unsigned.apk"></property>
<property name="javahome" location="${env.JAVA_HOME}"></property>
<property name="jarsigner" location="${javahome}/bin/jarsigner.exe"></property>
<target name="signedapk" depends="unsignedapk">
<exec executable="${jarsigner}">
<arg value="-keystore"></arg>
<arg value="${keystore}"></arg>
<arg value="-keypass"></arg>
<arg value="123456"></arg>
<arg value="-storepass"></arg>
<arg value="123456"></arg>
<arg value="-signedjar"></arg>
<arg value="${signedpakdir}"></arg>
<arg value="${unsingedapk}"></arg>
<arg value="zdc85"></arg>
</exec>
</target>
<property name="keystore" location="${basedir}/zdc85.keystore"></property>
<property name="signedpakdir" location="${builddir}/mobliesafe_signed.apk"></property>
<resproguard>
<issue id="sign" isactive="true">
<!--the signature file path, in window use \, in linux use /, and the default path is the running location-->
<path value="zdc85.keystore"/>
<!--storepass-->
<storepass value="123456"/>
<!--keypass-->
<keypass value="123456"/>
<!--alias-->
<alias value="zdc85"/>
</issue>
</resproguard>
D:\java\jdk7\bin\java.exe -jar AndResGuard-cli-1.1.4.jar ..\build\mobliesafe_unsigned.apk
将SevenZip\executable目录下找到7za-windows_x86_64.exe拷贝到工程的tools目录下
D:\java\jdk7\bin\java.exe -jar AndResGuard-cli-1.1.4.jar ..\build\mobliesafe_unsigned.apk -7zip 7za-windows_x86_64.exe
<property name="java7" location="D://java/jdk7/bin/java.exe" />
设置执行任务
示例:
<target name="proguardResourceApk" depends="unsignedapk">
<exec executable="${java7}">
<arg value="-jar" />
<arg value="tools/AndResGuard-cli-1.1.4.jar" />
<arg value="${unsingedapk}" />
<arg value="-7zip" />
<arg value="tools/7za-windows_x86_64.exe" />
</exec>
</target>
Android中APK打包流程相关推荐
- Android中APK安装流程解析
前言:大家都知道,手机关机以后,就是一个冰冷的砖头,只能用来做防身的利器,但是开机后,点击桌面上的任何一个图片,都能开启一个APP,这说明在开机过程中,系统把已经安装好的APP加载到内存中,这到底是怎 ...
- Android开发 —— apk打包流程
0. 前言 apk 全称是Android应用程序包(Android application package),一种能被Android系统识别并运行的文件格式. apk 文件基于 zip 文件格式,它与 ...
- java打包apk_Android中APK打包流程
aapt: android application package tool,SDK (Android打包流程图) #Android打包流程 1.通过aapt工具将 资源文件(res).清单文件(An ...
- Android Studio apk 打包流程
1.Build -> Generate Signed APK...,打开如下窗口 2.假设这里没有打过apk包,点击Create new,窗口如下 这里只要输入几个必要项 Key store p ...
- 安卓逆向_1 --- 逆向环境配置、APK 文件结构、APK 打包流程
哔哩哔哩:https://www.bilibili.com/video/BV1UE411A7rW?p=1 Android 逆向工程师系统培训‹第九期›( 课程目录 ):https://ke.yijin ...
- 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )
文章目录 一.APK 文件结构 二.APK 打包流程 三.APK 安装流程 四.安卓虚拟机 一.APK 文件结构 Android 应用的安装包时 以 " .apk " 为后缀的 A ...
- apk私钥_移动安全(二)|APK打包流程及签名安全机制初探
0x00.今天我们聊什么? 今天我们聊些啥?许久不见,是该聊些啥了,话不多说,先来个五毛钱得,聊一聊胡小毛的Android逆向之路吧,当然,你们想知道的一定不是走了这么远的路,胡小毛今年是不是又长高了 ...
- Android 应用apk打包原理
文章目录 前言 一.打包前 - app源码结构 二.打包后 - apk 文件结构 - apk结构? - 图示 (1) - 图示 (2) 三.那是怎么生成的? 1.apk 打包流程 2.详解:构建流程中 ...
- app加固apk文件防止反编译apk打包流程
文章目录 [1]加固 一.为什么要加固 二.加固方案 ①免费的第三方加固方案 ②付费的第三方加固方案SDK ③Java IO 流实现AES加密dex [2]加固方案的实现方式 [3]apk文件构造 [ ...
最新文章
- 为啥程序员下班后只关显示器从不关电脑?看看各大网站的答案~
- new Integer 和 Integer.valueOf 有什么不同
- HOG特征向量的代码 源代码改
- oracle vitu,Supply Chain Management (SCM) a Manufacturing | Oracle Česká Republika
- jquery选择器通配符
- 数据集永久下架,微软不是第一个,MIT 也不是最后一个
- RabbitMQ SSL安全认证
- lumion自动保存_全是踩过的坑,20条新人必看的Lumion良好操作习惯
- FPGA驱动步进电机
- 中国大数据风控企业揭秘系列之航天信息
- android百度输入法表情符号,表情符号怎么打?百度输入法打表情符号的方法
- python海龟库命令_turtle库常用命令
- 2021-07-06
- VMware环境下修改Centos qcow2格式镜像
- c语言中字符画蛇,字符画:蛇
- YoloV5 训练长方形图像
- 关于double和float类型的转换
- ExpandableListView自带箭头图标去除和替换
- 斐波那契数列求和——C语言(小白版)
- 9招教你防止电脑辐射
热门文章
- php简单抽奖,php 简单随机抽奖函数的简单示例
- python 证书-在python使用SSL(HTTPS)
- How to create hd MAP
- Java泛型方法与普通成员方法以及案例说明(五)
- 不看公式自己复原魔方
- mysql重新初始化
- 调整Ubuntu16.04屏幕分辨率
- HDU 4069 Squiggly Sudoku(DLX)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)...
- Linux 安装 .7z 解压和压缩文件
- 泛型方法的定义与使用