android 关联源码 打包jar包 安卓源码怎么打包 |
您所在的位置:网站首页 › unity打包文件比原文件还大 › android 关联源码 打包jar包 安卓源码怎么打包 |
Apk生成过程包括apk的打包编译最终生成apk包的过程 一、apk打包 1.Apk打包有两种方式,Eclipse或者ant,不管哪一种都包含下面七个步骤
第一步:编译打包资源文件 其实就是编译xml文件和编译资源生成resources.arsc文件,然后把res文件,这三样一起弄成压缩包 使用工具appt位于android-sdk\platform-tools目录下,源码在Android系统源码目录的frameworks\base\tools\appt Resource.cpp的buildResources()检测AndroidManifest.xml的合法性 makeFileResource()对res目录下的资源子目录进行资源文件名合法性检测。向资源table添加条目 ResourceTable.cpp的compileResourceFile()函数编译res与asserts目录下的资源生成resource.arsc文件 parseAndAddEntry()函数生成R.java文件, compileXmlFile()函数对res目录下的xml文件分别进行编译 最后将所有的资源与编译生成的resource.arsc文件以及加密过得androidManifest.xml文件压缩成resource.ap_
第二步:处理aidl文件,生成相应的Java文件。 aidl位于android-sdk/platform-tools目录下,源码位于android源码的frameworks\base\tools\aidl目录下。
第三步:编译工程源码生成相应的class文件
第四步:转换所有的class文件,生成classes.dex文件 使用android-sdk\platform-tools目录下的dx
第五步:打包生成apk文件 打包工具为apkbuilder,位于android-sdk\tools目录下,apkbuilder为一个脚本文件 第六步:对apk文件进行签名 调试时eclipse使用debug,keystore,我们打包发布用jdk的jarsigner工具,或者android源码中的 Build\tools\signapk工具
第七步:使用zipalign工具对签名后的APK文件进行对齐处理。 Zipalign工具位于android-sdk\tools目录,源码位于Android系统源码的build\tools\zipalign目录
2.Apk的打包过程流程图
3.打包过程中用到的工具 名称 功能介绍 在操作系统中的路径 aapt Android资源打包工具 ${ANDROID_SDK_HOME}/platform-tools/appt aidl Android接口描述语言转化为.java文件的工具 ${ANDROID_SDK_HOME}/platform-tools/aidl javac Java Compiler ${JDK_HOME}/javac或/usr/bin/javac dex 转化.class文件为Davik VM能识别的.dex文件 ${ANDROID_SDK_HOME}/platform-tools/dx apkbuilder 生成apk包 ${ANDROID_SDK_HOME}/tools/opkbuilder jarsigner .jar文件的签名工具 ${JDK_HOME}/jarsigner或/usr/bin/jarsigner zipalign 字节码对齐工具 ${ANDROID_SDK_HOME}/tools/zipalign
4.手动实现编译和打包 Win7环境首选创建工程 使用eclipse新建一个工程handpackTest android create project -n HandPackTest -t 1 -k com.snowtest -a HandPackTest -p ./HandPackTest
1、使用aapt命令编译资源文件 [1] 在HandPackTest目录新建gen然后cd到HandPackTest目录输入下面命令 aapt package -f -m -J gen -S res -I D:/run_ProgramFile/android_sdk_new/platforms/android-19/android.jar -M AndroidManifest.xml 这里的命令参数有点多就不全部介绍了,就说明几个: -J 后面跟着是gen目录,也就是编译之后产生的R类,存放的资源Id -S 后面跟着是res目录,也就是需要编译的资源目录 -l 后面跟着是系统的库,因为我们在项目资源中会用到系统的一些资源文件,所以这里需要链接一下 -M 后面跟着是工程的清单文件,需要从这个文件中得到应用的包名,然后产生对应的R文件和包名。 生成文件:将多出一个文件HandPackTest\gen\com\snowtest\R.java
[2]在HandPackTest目录新建assets目录然后cd到HandPackTest目录输入下面命令
使用aapt命令生成资源包文件(编码AndroidManifest.xml,resource.arsc等) aapt package -f -A assets -S res -I D:/run_ProgramFile/android_sdk_new/platforms/android-19/android.jar -M AndroidManifest.xml -F bin/handpackTest 生成文件:/bin/handpackTest其实此文件是res和AndroidManifest.xml和resources.arsc的编译后的压缩文件,可以用好压解压
这个命令其实就是将资源文件进行编码成二进制文件,我们之前介绍的一篇文章中,就是解析这些二进制文件: 这些二进制文件都是有自己的格式的,系统编程二进制文件是为了优化,减小包的大小。 但是这里需要注意的是assets目录是不会进行二进制编译的。
2、此工程不存在,省去
3.使用javac命令编译源文件 javac -target 1.7 -bootclasspath D:/run_ProgramFile/android_sdk_new/platforms/android-19/android.jar -d bin gen\com\snowtest\*.java src\com\snowtest\*.java
-target:表示编译之后的class文件运行的环境版本 -bootclasspath:表示编译需要用到的系统库 -d:表示编译之后的class文件存放的目录 这里需要把gen下和src下面的java都编译了。
生成文件:\bin\com\snowtest目录大量的文件
4.使用dx命令,将class文件转化成dex D:\run_ProgramFile\android_sdk_new\build-tools\19.0.0\dx --dex --output=bin/classes.dex bin 生成文件:\bin目录下生成classes.dex文件
5.使用apkbuilder命令来编译 apkbuilder在android sdk build tools r22里面被移除了,发现其实是调用androidsdk根目录/tools/lib/sdklib.jar 这个jar包, 解决办法windows上 把\android_sdk_new\tools\android.bat文件复制一份改名为apkbuilder.bat 然后修改apkbuilder.bat里面的com.android.sdkmanager.Main为 com.android.sdklib.build.ApkBuilderMain就可以了
apkbuilder E:/apk从启动到运行全解/1.apk生成过程/HandPackTest/bin/handpackTest.apk -v -u -z E:/apk从启动到运行全解/1.apk生成过程/HandPackTest/bin/handpackTest -f E:/apk从启动到运行全解/1.apk生成过程/HandPackTest/bin/classes.dex -rf E:/apk从启动到运行全解/1.apk生成过程/HandPackTest/src 生成文件:\bin目录下生成handpackTest.apk文件
6.使用keytool来产生一个keystore文件 Keytool在jdk目录 keytool -genkey -keystore snowtest.keystore -keyalg RSA -validity 10000 -alias snowtest.keystore
回车之后会要求输入密码和各种信心最后生成一个snowtest.keystore文件 -genkey 产生证书文件 -keystore 指定密钥库的.keystore文件中 -keyalg 指定密钥的算法
-validity 为证书有效天数,这里我们写的是10000天。 -alias 产生别名
7.使用jarsigner签名apk文件 jarsigner -verbose -keystore snowtest.keystore -signedjar handpackTest_signed.apk handpackTest.apk snowtest.keystore
以上命令的说明: -verbose:指定生成详细输出 -keystore:指定数字证书存储路径 -signedjar:该选项的三个参数为 签名后的apk包 未签名的apk包 数字证书别名 注意有效期哦。
参考: android软件安全与逆向分析
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |