Ⅰ AAPT简介
AAPT 是Android Asset Packaging Tool的缩写,它存放在SDK的tools目录下,AAPT的功能相对比较强大,可以通过它查看、创建、更新压缩文件(如.zip文件,.jar文件,.apk文件),它可以把 资源 编译为二进制文件,同时生成resources.arsc,AAPT这个工具在APK打巧神包过程中起到了非常重要的作用,在打包的过程中,用AAPT对APK中使用到的资源进行打包,这里不对AAPT这个工具做过多的讨论。
我们来看一下AAPT打包的流程:
AAPT这个工具在 打包 的过程中主要做了以下工作:
1.把“assets”和“res/raw”目录下的所有资源进行打包(会根据不同的文件后缀选择压缩或不压缩),“孝型亏res/”目录下的其他资源进行编译或者其他处理(具体的处理方式视文件后缀的不同而不同,例如:“.xml”会编译成二进制文件,“.png”文件会进行优化等等)后才进行打包。
2.会对除 assets资源 之外的所有资源赋予一个资源ID常量,并且会生成一个资源索引表resources.arsc;
3.编译租链AndroidManifest.xml成二进制的XML文件。
4.把上面3个步骤中生成结果保存在一个“.ap_”文件,并把各个资源ID常量定义在一个R.java中;
.ap_文件会在生成APK时放入APK包中,.ap_这个文件本身是一个zip包,他里面包含了resources.arsc、AndroidManifest.xml、assets以及所有的资源文件。
Ⅱ android app 打包流程
App 打包
aapt是android中的资源打包工具,打包资源就用它。
打包大致流程:
aapt把resources目录下的资源生成R.java文件,并为AndroidManifest.xml生成Manifest.java类。
aidl把项目中自定义的aidl文件生成对应的java类。
JavaCompiler把所有的Java源文件编译成class文件,包括:aapt生成的、aidl生成的、项目中自有的java源文件
使用proguard混淆,并生成一个proguardMapping.xml文件(可选项:可以混淆也可以不混淆)
使用dex工具把所有的class文件生成.dex文件
使用aapt资源打包工具把resources、assets目录下的资源打包成一个_ap文件
使用apkbuilder把所有的dex、_ap文件、AndroidManifest.xml文件打包成一个未签名的apk
使用jarsinger生成一个签名过的apk包
使用zipalign工具对要发布的apk文件进行对齐操作,以便在运行时节约内存。
Ⅲ 新一代Android渠道打包工具:1000个渠道包只需要5秒
♥♥♥ 原文转自 极分享 更多详情及更新 查看原文 ♥♥♥
最新版本
v1.0.4 - 2016.01.19 - 完善获取APK路径的方法,增加MarketInfo
v1.0.3 - 2016.01.14 - 增加缓存,新增ResUtils,更有好的错误提示
v1.0.2 - 2015.12.04 - 兼容proctFlavors,完善异常处理
v1.0.1 - 2015.12.01 - 如果没有读取到渠道,默认返回空字符串
v1.0.0 - 2015.11.30 - 增加Java和Python打包脚本,增加文档
v0.9.9 - 2015.11.26 - 测试版发布,支持全新的极速打包方式
源码:https://github.com/mcxiaoke/packer-ng-plugin
项目介绍
packer-ng-plugin 是下一代Android渠道打包工具Gradle插件,支持极速打包,1000个渠道包只需要5秒钟,速度是 gradle-packer-plugin 的1000倍以手局哗上,可方便的用于CI系统集成,支持自定义输出目录和最终APK文件名,依赖包:com.mcxiaoke.gradle:packer-ng:1.0.+ 简短名:packer,可以在项目的 build.gradle 中指定使用,还提供了命令行独立使用的Java和Python脚本。实现原理见本文末尾。
使用指南
Maven Central
.
.
.
.
.
实现原理
PackerNg原理
优点
使用APK注释字段保存渠道信息和MAGIC字节,从文件末尾读取渠道信息,速度快
实现为一个Gradle Plugin,支持定制输出APK的文件名等信息,方便CI集成
提供Java版和Python的独立命令行脚本,不依赖Gradle插件,支持独立使用
由于打包速度极快,单个包只需要5毫秒左右,可用于网站后台动态生成渠道包
缺点
没有使用Android的proctFlavors,无法利用flavors条件编译的功能
文件格式
Android应用使用的APK文件就是一个带签名信息的ZIP文件,根据 ZIP文件格式规范,每个ZIP文件的最后都必须有一个叫Central Directory Record 的部分,这个CDR的最后部分叫"end of central directory record",这一部分包含一些元数据,它的末尾是ZIP文件的注释。注释包含Comment Length和File Comment两个字段,前者表示注释内容的长度,后者是注释的内容,正确修改这一部分不会对ZIP文件造成破坏腊枯,利用这个字段,我们可以添加一些自定义的数据,PackerNg项目就是在这里添加和读取渠道信息。
细节处理
原理很简单,就是将渠道信息存放在APK文件的注释字段中,但是实现起来遇到不少坑,测试了好多次。
同类工具
gradle-packer-plugin - 旧版渠道打包工具,完全使用Gradle系统实现,能利用Android提供的proctFlavors系统的条件编译功能,无任何兼容性问题,方便集成,但是由于每次都要重新打包,速度比较慢,不适合需要大量打包的情况。(性能:200个渠道包需要一到两小时)
Meituan-MultiChannelTool - 使用美团方案的实现,在APK文件的META-INF目里增加渠道文件,打包速度也非常快,毕行但读取时需要遍历APK文件的数据项,比较慢,而且以后可能遇到兼容性问题
MultiChannelPackageTool - 将渠道写入APK文件的注释,这个项目没有提供Gradle插件,只有命令行工具,不方便CI集成,使用ZIP文件注释的思路就是来自此项目
转自 极分享 阅读原文
Ⅳ ANDROID多渠道快速打包实践
参考资料:
美团Android自动化之旅—生成渠道包
Android批量打包提速
AndroidMultiChannelBuildTool
背景
随着发版需要,每次发版所需渠道包越来越多(现在差不多有一百个左右了),正常gradle打包由于耗时效率过低已无法满足需求,开始了android多渠道快速打包实践。
方法
下面主要介绍两种快速打包的方式:
1、类似美团的方式,在META-INF中写入渠道名的空文件,用于读取空文件。 美团Android自动化之旅—生成渠道包
2、在apk末尾动态写入渠道信息。 一种动态为apk写入信息的方案
其实这两种方式都是同一个原理,替换以前从manifest中读取渠道号的方式,而使用新的获取方式(渠道号如何写入就如何读取)。
所以这首先需要客户端(重要!):
1、统一应用中获取渠道的方式并替换之前的(最好兼容)。
2、注意第三方SDK渠道号的传入,比如友盟sdk,否则第三方会使用默认从manifest中读取的方式。
下面介绍一种已经测试过的方法(git上开源项目 AndroidMultiChannelBuildTool )
1、安装环境由于脚本环境是使用python语言,所以需要我们 安装环境 。
2、导入项目导入开源项目 AndroidMultiChannelBuildTool ),并把悔拿想要批量打包的apk文件拷贝到PythonTool目录下(与py同级),运行py脚本即可打包完成。
以上基本实现快速好前滚打包,经过测试一分钟百十个无压力。另外需要注意这种方式只适用于打包需求一致渠道号不同,不适用特殊定制渠道。
备注:9月21日友余补充快速打包java版本,详见 AndroidMultiChannelBuildTool-Java-master
Ⅳ android 工程 如何一键编译打包成apk
打包步骤:
1、生成keystore
按照下面的命令行在C:ProgramFilesJavajdk1.6.0_10in>目录下,输入keytool-genkey-aliasandroid.keystore-keyalgRSA-validity100000-keystoreandroid.keystore
参数意义:-validity主要是证书的有效期,写100000天;空格,退格键都算密码。
命令执行后会在C:ProgramFilesJavajdk1.6.0_10in>目录下生成android.keystore文件。如图-1
图-2EclipseAndroid打包工具
接下来的步骤就是不断的next。下面仅贴出图片,不解释。
step2:选择打包的项目
step3:选择生成的EclipseAndroid.keystore文件并输入密码
step4:选择aliaskey并输入密码
step5:最后选择生成androidapk文件的目录及文件名
最终生成的apk文件。
Ⅵ 如何应用安卓APK文件进行解包打包和修改
不需要解包跟打包,直接修改就可以,修改的的方法。
如下参考:内
1.将需要修改的apk包复制到100apktool的路径中容。注意:您需要将文件名更改为123apk,如下图。
Ⅶ 请教如何使用android studio同时打包多个apk
渠道信息一般在 AndroidManifest.xml中修改以下值:
<meta-data android:name="UMENG_CHANNEL" android:value="wandoujia" />
首先你必须在AndroidManifest.xml中的meta-data修改以下的样子:
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
其中${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定义配置的值。
build.gradle文件就利用proctFlavors这样宴高写:
proctFlavors {
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
{
manifestPlaceholders = [UMENG_CHANNEL_VALUE: ""]
}
c360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]
}
uc {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"]
}
}
其中[UMENG_CHANNEL_VALUE: "wandoujia"]就是对应${UMENG_CHANNEL_VALUE}的值。
最新更新
后来发现上面的重复代码太多,就在网上又发现了一个更简洁的写法
proctFlavors {
wandoujia {}
{}
c360 {}
uc {}
proctFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
其中name的值对相对应各个proctFlavors的选项值,这样就达到自动替换渠道值的目的了。
这样生成apk时,选择相应的Flavors来生成指定渠道的包就可以了,而且生成的apk会自动帮你加上相应渠道的后缀,非常方便和直观。大家可以自己反编译验证。
一次生成所有渠道包
在android studio底栏中有个命令行工具Terminal,打开后就CMD可以自动切换到当前项目的目录下。
有的项目下会有graldew.bat这个文件,你就可以输入这个命令:
gradlew assembleRelease
就可以一次性生成所有的渠道包了
不过我一般不建议大家使用这个命令,gradlew这个命令的gralde的版本无法控制,有时候会莫名其妙的下载老版本的gradle
所以我个人推荐大家使用以下的用法。
先找到gralde的根目录,在系统变量里添加两个环境变悄吵量:
变量名为:GRADLE_HOME,变量值就为gradle的根目录;
所以变量值为:C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1
还有一个在系统变量里PATH里面添加gradle的bin目录
我的就是C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1\bin
这里配置完成了,接着在Terminal中敲下 gradle assembleRelease就可以一次性生成所有的渠道包了。
所有生成的apk在项目的build\outputs\apk下。
如果只是想生成单个渠道的包呢?
打开Android Studio的Gradle tasks面板(右边侧边栏),会发现模块启祥侍多了很多任务
Ⅷ android友盟集成测试需要生成apk么
看一些博客的流程是需要生成apk的,如下:
1、安装DeviceID.apk(用来查看设备信息)
2、安装成功后,在设备上打开(推荐 海马玩模拟器)
3、软件会自动获取到 IMEI 和WIFI MAC Address ,这两个值在友盟的后台需要用到
4、在友盟的 集成测试后台 中添加设备,如下图所示
输入获取到的device_id,mac,例如:{"device_id":"xxxx","mac_address":"xxxx"姿慎} 名称孝伍:填设备名称
注:前提是应用已集成友盟SDK
5、打包APK,安装好在模拟器上,启动APP,在友盟巧册或的后台日志就会实时刷新,如下图所示