标签:src key out depends XML ebe ack splash 文件系统
注意:
-(1)必须使用AS的SDK(纯净版),避免出问题不能Eclipse
-(2)建议使用Eclipse学习打包,Eclipse目录结构简单
1.生成R文件,调用命令aapt.exe(sdk\build-tools\23.0.3)
2.编译aidl文件,调用命令aidl(sdk\build-tools\23.0.3)
3.编译所有的java文件,调用命令jdk的javac.exe
4.解压第三方jar包,调用命令jdk的jar
5.生成dex文件,调用命令dx.bat(sdk\build-tools\23.0.3)
6.生成资源包文件resources.ap_,调用命令aapt.exe
7.生成未签名apk,调用命令apkbuilder.bat(sdk\tools)
8.生成签名apk,调用命令jdk的jarsigner.exe
任何图形化解密底层都是命令
为了在任何目录都能够调用aapt.exe命令,需要配置到path环境变量
命令
E:\bakclass\CmdDemo>aapt p -f -m -J build\gen -S res -I D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -M AndroidManifest.xml
先跳过编译aidl文件
注意:使用jdk不能使用1.8,建议使用1.7
命令
E:\bakclass\CmdDemo>D:\ProgramFiles\Java1.7\jdk1.7.0_80\bin\javac.exe -encoding utf-8 -bootclasspath D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -cp libs\android-support-v4.jar -d build\classes src\com\ngyb\cmddemo\MainActivity.java build\gen\com\ngyb\cmddemo\R.java
调用jdk的jar.exe命令
命令
jar xvf ..\..\libs\android-support-v4.jar
非常非常注意:必须使用AS的SDK(纯净版)、必须使用jdk1.7
命令所在目录sdk\build-tools\23.0.3\dx.bat
使用jdk1.8,生成dex文件报错:建议使用jdk1.7
解决上述问题:重新编译java文件,使用jdk1.7
dx --dex --output=E:\bakclass\CmdDemo\build\classes.dex E:\bakclass\CmdDemo\build\classes
命令
E:\bakclass\CmdDemo>aapt p -f -M AndroidManifest.xml -S res -A assets -I D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -F build\resoures.ap_
调用命令:sdk\tools\apkbuilder.bat
命令
E:\bakclass\CmdDemo>apkbuilder E:\bakclass\CmdDemo\build\Demo_unsigned.apk -u -z E:\bakclass\CmdDemo\build\resoures.ap_ -f E:\bakclass\CmdDemo\build\classes.dex -rf E:\bakclass\CmdDemo\src -rj E:\bakclass\CmdDemo\libs
没有签名不能安装,没有证书信息
debug.keystore目录:C:\Users\用户名.android\debug.keystore
debug.keystore运行测试项目,给apk签名,上线项目必须使用公司自己的keystore
生成keystore图形化界面
生成keystore命令(秘钥对称:公钥和使用)
E:\bakclass\CmdDemo>keytool -genkeypair -alias ngyb -keyalg "RSA" -validity 3650 -keystore ngyb.jks
命令所在目录:jdk/bin/jarsigner.exe
通过命令行获取keystore别名
keytool -list -keystore ngyb.jks -v
命令
E:\bakclass\CmdDemo>jarsigner -keystore ngyb.jks -storepass 123456 -keypass 123456 -signedjar build\Demo_signed.apk build\Demo_unsigned.apk ngyb
命令
aapt p -f -m -J build\gen -S res -I D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -M AndroidManifest.xml
aidl目录所在目录:sdk\build-tools\23.0.3\aidl.exe
编译2个aidl文件
E:\南宫燚滨\day1\MobileSafe>aidl -Isrc -pD:\ProgramFiles\Android\sdk\platforms\android-18\framework.aidl -obuild\gen src\android\telephony\NeighboringCellInfo.aidl
E:\南宫燚滨\day1\MobileSafe>aidl -Isrc -pD:\ProgramFiles\Android\sdk\platforms\android-18\framework.aidl -obuild\gen src\com\android\internal\telephony\ITelephony.aidl
调用jdk1.7的javac.exe命令
D:\ProgramFiles\Java1.7\jdk1.7.0_80\bin\javac.exe -encoding utf-8 -bootclasspath D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -cp libs\android-support-v4.jar;libs\nineoldandroids-2.4.0.jar; -d build\classes build\gen\com\android\internal\telephony\ITelephony.java build\gen\com\ngyb\safe\R.java src\com\ngyb\safe\activity\AppManagerActivity.java src\com\ngyb\safe\activity\BlackEditActivity.java src\com\ngyb\safe\activity\CallSmsSafeActivity.java src\com\ngyb\safe\activity\CommonNumberActivity.java src\com\ngyb\safe\activity\CommonNumberActivity.java src\com\ngyb\safe\activity\CommonToolActivity.java src\com\ngyb\safe\activity\HomeActivity.java src\com\ngyb\safe\activity\NumberAdressActivity.java src\com\ngyb\safe\activity\SelectContactActivity.java src\com\ngyb\safe\activity\SelectContactActivity2.java src\com\ngyb\safe\activity\SettingActivity.java src\com\ngyb\safe\activity\SjfdActivity.java src\com\ngyb\safe\activity\SjfdBaseSetupActivity.java src\com\ngyb\safe\activity\SjfdSetupActivity1.java src\com\ngyb\safe\activity\SjfdSetupActivity2.java src\com\ngyb\safe\activity\SjfdSetupActivity3.java src\com\ngyb\safe\activity\SjfdSetupActivity4.java src\com\ngyb\safe\activity\SjfdSetupActivity5.java src\com\ngyb\safe\activity\SplashActivity.java src\com\ngyb\safe\bean\AddressBean.java src\com\ngyb\safe\bean\AppBean.java src\com\ngyb\safe\bean\BlackBean.java src\com\ngyb\safe\bean\ContactBean.java src\com\ngyb\safe\bean\HomeBean.java src\com\ngyb\safe\business\AppProvider.java src\com\ngyb\safe\db\BlackDao.java src\com\ngyb\safe\db\BlackDB.java src\com\ngyb\safe\db\BlackDBOpenHelper.java src\com\ngyb\safe\db\CommonNumberDao.java src\com\ngyb\safe\db\NumberAddressDao.java src\com\ngyb\safe\receiver\BootcompletedReceiver.java src\com\ngyb\safe\receiver\SafeAdminReceiver.java src\com\ngyb\safe\receiver\SmsReceiver.java src\com\ngyb\safe\service\CallSmsSafeService.java src\com\ngyb\safe\service\GPSService.java src\com\ngyb\safe\service\NumberAddressService.java src\com\ngyb\safe\test\TestBlackDao.java src\com\ngyb\safe\utils\Constants.java src\com\ngyb\safe\utils\ContactUtils.java src\com\ngyb\safe\utils\GZipUtils.java src\com\ngyb\safe\utils\PackageUtils.java src\com\ngyb\safe\utils\PreferenceUtils.java src\com\ngyb\safe\utils\ServiceStateUtils.java src\com\ngyb\safe\view\AddressDialog.java src\com\ngyb\safe\view\AddressToast.java src\com\ngyb\safe\view\FocusedTextView.java src\com\ngyb\safe\view\ProgressStateView.java src\com\ngyb\safe\view\SettingItemView.java
解压2个jar包
jar xvf ..\..\libs\android-support-v4.jar
jar xvf ..\..\libs\nineoldandroids-2.4.0.jar
命令
E:\南宫燚滨\day1\MobileSafe>dx --dex --output=E:\南宫燚滨\day1\MobileSafe\build\classes.dex E:\南宫燚滨\day1\MobileSafe\build\classes
命令
E:\南宫燚滨\day1\MobileSafe>aapt p -f -M AndroidManifest.xml -S res -A assets -I D:\ProgramFiles\Android\sdk\platforms\android-18\android.jar -F build\resources.ap_
命令
E:\南宫燚滨\day1\MobileSafe>apkbuilder E:\南宫燚滨\day1\MobileSafe\build\MobileSafe_unsigned.apk -u -z E:\南宫燚滨\day1\MobileSafe\build\resources.ap_ -f E:\南宫燚滨\day1\MobileSafe\build\classes.dex -rf E:\南宫燚滨\day1\MobileSafe\src -rj E:\南宫燚滨\day1\MobileSafe\libs
调用jdk命令jarsigner.exe
E:\南宫燚滨\day1\MobileSafe>jarsigner -keystore ngyb.jks -storepass 123456 -keypass 123456 -signedjar build\MobileSafe_signed.apk build\MobileSafe_unsigned.apk ngyb
签名apk多出目录:META-INF
1.生成R.java文件,调用sdk的aapt.exe
2.编译aidl文件 -> 生成java文件,调用sdk的aidl.exe
3.编译所有的java文件,生成class文件,调用1.7jdk的javac.exe
4.解压第三方jar包,生成class文件,调用jdk的jar.exe
5.生成classes.dex文件,调用命令dx.bat
6.编译资源文件,生成resources.ap_,调用命令aapt
7.生成未签名apk,调用apkbuilder.bat,不能安装
8.生成签名apk,调用jdk的jarsigner.exe
RSA:非对称加密算法
秘钥对:公钥和私钥
公钥加密私钥解密;私钥加密公钥解密
借助代码提示:ant.dtd导入Eclipse(导入类型文件系统)
项目根目录创建build.xml
明天项目自动化:jenkins
执行ant命令,需要安装环境apache-ant-1.9.7,需要调用ant.bat命令编译ant脚本文件
调用语法:ant target任务名称
<project name="MobileSafe"> <target name="hello"> <echo message="你好,我是ant"></echo> </target> </project>
22.ant打包常用语法
<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE project SYSTEM "ant.dtd" > -->
<!-- 为了快速入门:代码提示 -->
<!-- project:项目跟标签 ,name属性项目名称,default:默认执行的任务,basedir,-->
<!-- ant:一切皆任务,任务为驱动 -->
<!-- target:任务标签 -->
<!-- echo:打印输出标签,输出内容通过message属性指定 -->
<!-- 创建目录标签mkdir,通过dir属性指定目录位置 -->
<!-- 删除目录标签delete,通过dir属性指定删除目录 -->
<!-- depends:属性,指定任务直接的依赖关系,多个任务逗号隔开 -->
<project name="MobileSafe" default="hello">
<!-- 相当于抽象成员变量 -->
<property name="buildDir" location="E:\ngyb\MobileSafe\build_new"/>
<target name="hello">
<echo message="你好,我是ant"></echo>
</target>
<target name="hello2">
<echo message="${buildDir}"></echo>
</target>
<!-- 先删除,在创建目录 -->
<target name="deleteDir">
<delete dir="E:\ngyb\MobileSafe\build_new"/>
</target>
<!-- 创建目录 -->
<target name="createDir" depends="deleteDir">
<mkdir dir="${buildDir}"/>
</target>
<!-- 删除目录 -->
<!-- <target name="deleteDir">
<delete dir="E:\ngyb\MobileSafe\build_new"/>
</target> -->
</project>
<!-- 项目初始化:删除build目录,创建build目录 --> <target name="initProject"> <echo message="初始化任务"/> <delete dir="E:\ngyb\MobileSafe\build"/> <mkdir dir="E:\ngyb\MobileSafe\build\gen"/> </target>
<target name="generateR" depends="initProject"> <exec executable="${aapt.exe}"> <arg value="p"/> <arg value="-f"/> <arg value="-m"/> <arg value="-J"/> <arg value="${genDir}"/> <arg value="-S"/> <arg value="${resDir}"/> <arg value="-I"/> <arg value="${android.jar}"/> <arg value="-M"/> <arg value="${manifest.xml}"/> </exec>
<target name="compileAidl" depends="generateR"> <echo message="任务2:编译aidl文件"/> <apply executable="${aidl.exe}"> <arg value="-I${srcDir}"/> <arg value="-p${framework.aidl}"/> <arg value="-o${genDir}"/> <fileset includes="**/*.aidl" dir="${srcDir}"/> </apply>
<target name="compileJava" depends="compileAidl,initJavac"> <echo message="任务3:编译java文件"/> <javac encoding="utf-8" bootclasspath="${android.jar}" destdir="${classesDir}" target="1.7" source="1.7" executable="${javac.exe}" includeantruntime="true"> <classpath> <fileset includes="**/*.jar" dir="${libsDir}"/> </classpath> <src path="${srcDir}"/> <src path="${genDir}"/> </javac>
<target name="unZipLibs" depends="compileJava"> <echo message="任务4:解压第三方jar包"/> <unjar dest="${classesDir}"> <!-- fileset:指定解压jar包路径、类型 --> <fileset dir="${libsDir}" includes="**/*.jar"/> </unjar>
报错:前面编译java文件使用jdk1.8
<target name="compileDex" depends="unZipLibs"> <echo message="任务5:生成dex文件"/> <exec executable="${dx.bat}"> <arg value="--dex"/> <arg value="--output=${classes.dex}"/> <arg value="${classesDir}"/> </exec>
<target name="compileResources" depends="compileDex"> <echo message="任务6:编译资源文件"/> <exec executable="${aapt.exe}"> <arg value="p"/> <arg value="-f"/> <arg value="-M"/> <arg value="${manifest.xml}"/> <arg value="-S"/> <arg value="${resDir}"/> <arg value="-A"/> <arg value="${basedir}\assets"/> <arg value="-I"/> <arg value="${android.jar}"/> <arg value="-F"/> <arg value="${resourcesAp}"/> </exec>
<target name="generateUnsignedApk" depends="compileResources"> <echo message="7.生成未签名apk"/> <exec executable="${apkbuilder.bat}"> <arg value="${unsignedApk}"/> <arg value="-u"/> <arg value="-z"/> <arg value="${resourcesAp}"/> <arg value="-f"/> <arg value="${classes.dex}"/> <arg value="-rf"/> <arg value="${srcDir}"/> <arg value="-rj"/> <arg value="${libsDir}"/> </exec>
<target name="generateSignedApk" depends="generateUnsignedApk"> <echo message="任务8:生成签名apk"/> <exec executable="${jarsigner.exe}"> <arg value="-keystore"/> <arg value="${ngyb.jks}"/> <arg value="-storepass"/> <arg value="123456"/> <arg value="-keypass"/> <arg value="123456"/> <arg value="-signedjar"/> <arg value="${signedApk}"/> <arg value="${unsignedApk}"/> <arg value="ngyb"/> </exec>
优化:便于回去使用,修改代码
1.所有property统一管理
2.环境变量
<property environment="env"></property> <target name="printEnv"> <echo message="android的SDK环境变量:${env.JAVA_HOME}"/> </target>
ant脚本使用环境变量
<property environment="env"></property> <property name="android_sdk" location="${env.ANDROID_SDK}"/> <property name="aapt.exe" location="${android_sdk}\build-tools\23.0.3\aapt.exe"/>
工具软件
http://www.androiddevtools.cn/
快速搜索软件:http://www.listary.com/
标签:src key out depends XML ebe ack splash 文件系统
原文地址:https://www.cnblogs.com/nangongyibin/p/10354597.html