Eclipse集成Ant 打包签名APK和打混淆jar
2017-03-22 18:35
477 查看
Ant的下载地址请戳这里
Ant的环境变量配置和jdk的配置是一样的。最好也把sdk的环境变量也配置一下。
Eclipse的工程目录如下图:
buildapp.properties
proguard.cfg的文件我就贴出来了,混淆我相信应该都会懂一点,不懂得可以戳这里
以上就是Ant打签名apk的全部步骤,每一步都有注释作为解释。
分割线------------------------------------------------------------------------------------------------------------------
工程目录:
buildapp.properties
以上就是Ant大混淆jar的全部步骤,其实和上面打签名apk差不多。
分割线------------------------------------------------------------------------------------------------------------------
换成Eclipse之后注意要改一下ant的run as:
选择第一个,就ok了。
Ant的环境变量配置和jdk的配置是一样的。最好也把sdk的环境变量也配置一下。
Eclipse的工程目录如下图:
buildapp.properties
# This is an config file used to replace variable in buildapp.xml # Note: Use the '\\' instead of '\' # Note: -ospath absolute path # this name of release app appName = MobileClient # this name of android sdk path sdk-folder = ${env.ANDROID_SDK_HOME} # ths name of java jdk path java-home = ${env.JAVA_HOME} # this name of android sdk platform path sdk-platform-folder = ${sdk-folder}\\platforms\\android-8 # this name of android sdk tools path sdk-tools-folder = ${sdk-folder}\\tools # this name of android sdk platform-tools paht sdk-platform-tools-folder = ${sdk-folder}\\platform-tools # complier must contain this jar android-jar = ${sdk-platform-folder}/android.jar # Here is the build tool aapt-exe = ${sdk-platform-tools-folder}\\aapt.exe aidl-exe = ${sdk-platform-tools-folder}\\aidl.exe dx-bat = ${sdk-platform-tools-folder}\\dx.bat apkbuilder-bat = ${sdk-tools-folder}\\apkbuilder.bat jarsigner-exe = ${java-home}\\bin\\jarsigner.exe zipalign-exe = ${sdk-tools-folder}\\zipalign.exe # this name of proguard home path proguard-home = ${sdk-tools-folder}\\proguard # this name of use proguard's jar proguard-jar = ${proguard-home}\\lib\\proguard.jar #this name of proguard.cfg path proguard-cfg = ${basedir}\\proguard.cfg # aidl file required to compile the framework.aidl file framework-aidl = ${sdk-platform-folder}\\framework.aidl # javac memory size javac-forkOn-memoryinitialsize = 256m javac-forkOn-memoryMaximumSize = 256m # apk version version = 2 # this name is compile file path compile-bin-name = bin-compile compile-bin-ospath = ${basedir}\\${compile-bin-name} # this name is classes.dex file output path dex-file-name = classes.dex dex-ospath = ${compile-bin-ospath}\\${dex-file-name} # this name is aapt generation resources package resources-package-name = resources.ap_ resources-package-ospath = ${compile-bin-ospath}\\${resources-package-name} # this name is output unsigned-apk path unsigned-apk-name = ${appName}-unsigned.apk unsigned-apk-ospath = ${compile-bin-ospath}\\${unsigned-apk-name} #this name is output singed-apk path signed-apk-name = ${appName}-unaligned.apk signed-apk-ospath = ${compile-bin-ospath}\\${signed-apk-name} #this name is output zipalign-apk path aligned-apk-name = ${appName}.apk aligned-apk-ospath = ${compile-bin-ospath}\\${aligned-apk-name} # this name is keystore-file path keystore-file-ospath = ${basedir}\\8M.keystore # this name is storepass key storepass-key = abc1234 # thsi name is keypass key keypass-key = abc1234buildapp.xml
<?xml version="1.0" encoding="UTF-8"?> <project name="MobileClient_build" default="release"> <!-- 必须放在最前面,可以确保能使用到编译平台的环境变量 --> <property environment="env" /> <!-- 使用第三方的ant包,使ant支持for循环--> <taskdef resource="net/sf/antcontrib/antcontrib.properties"> <classpath> <pathelement location="${env.ANT_HOME}/lib/ant-contrib-1.0b3.jar" /> </classpath> </taskdef> <!-- 引入属性文件 --> <property file="buildapp.properties"></property> <!-- 清单文件 相对路径--> <property name="manifest-xml" value="AndroidManifest.xml" /> <!-- 项目资源文件目录 相对路径--> <property name="resource-dir" value="res" /> <!-- 项目assets目录 相对路径--> <property name="asset-dir" value="assets" /> <!-- java源文件目录 相对路径--> <property name="srcdir" value ="src" /> <!-- java源文件目录 绝对路径--> <property name="srcdir-ospath" value="${basedir}\${srcdir}" /> <!-- 外部类库所在目录 相对路径--> <property name="external-lib" value="libs" /> <!-- 外部类库所在目录 绝对路径--> <property name="external-lib-ospath" value="${basedir}\${external-lib}" /> <!-- 初始化工作 --> <target name="init"> <echo>...开始进行目录初始化...</echo> <!-- 生成R文件的相对目录 --> <var name="outdir-gen" value="gen" /> <delete dir="${compile-bin-ospath}" /> <mkdir dir="${compile-bin-ospath}" /> <echo>...目录初始化结束...</echo> </target> <target name="testOut"> <echo>${env.JAVA_HOME}</echo> <echo>${env.ANT_HOME}</echo> <echo>${basedir}</echo> </target> <!-- 根据工程中的资源文件生成R.java文件 --> <target name="gen-R" depends="init"> <echo>...开始生成R.java文件...</echo> <exec executable="${aapt-exe}" failonerror="true"> <arg value="package" /> <arg value="-f" /> <arg value="-m" /> <arg value="-J" /> <arg value="${outdir-gen}" /> <arg value="-S" /> <arg value="${resource-dir}" /> <arg value="-M" /> <arg value="${manifest-xml}" /> <arg value="-I" /> <arg value="${android-jar}" /> </exec> <echo>...生成R.java文件结束...</echo> </target> <!-- 编译aidl文件 --> <target name="aidl-exe" depends="gen-R"> <echo>...开始编译aidl文件...</echo> <apply executable="${aidl-exe}" failonerror="true"> <!-- 指定预处理文件 --> <arg value="-p${framework-aidl}" /> <!-- aidl声明的目录 --> <arg value="-I${srcdir}" /> <!-- 目标文件目录 --> <arg value="-o${outdir-gen}" /> <!-- 指定哪些文件需要编译 --> <fileset dir="${srcdir}"> <include name="**/*.aidl" /> </fileset> </apply> <echo>...编译aidl文件结束...</echo> </target> <!-- 将工程中的java源文件编译成class文件 --> <target name="compile" depends="aidl-exe"> <echo>...开始java源文件编译成class文件....</echo> <javac encoding="utf-8" source="1.6" target="1.6" srcdir="." deprecation="on" destdir="${compile-bin-ospath}" bootclasspath="${android-jar}" verbose="false" debug="true" fork="on" memoryinitialsize="${javac-forkOn-memoryinitialsize}" memorymaximumsize="${javac-forkOn-memoryMaximumSize}" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"> <compilerarg line="-Xlint:unchecked" /> <compilerarg line="-encoding utf-8 " /> <classpath> <fileset dir="${external-lib}" includes="*.jar" /> <fileset dir = "${sdk-platform-folder}" includes="*.jar"></fileset> <fileset dir="${sdk-tools-folder}\support" includes="*.jar"></fileset> </classpath> </javac> <echo>...java源文件编译成class文件完毕....</echo> </target> <!--将.class 混淆--> <target name="optimize" depends="compile"> <echo>...开始代码混淆...</echo> <jar basedir="${compile-bin-ospath}" destfile="${compile-bin-ospath}\temp.jar"/> <taskdef name="proguard" classname="proguard.ant.ProGuardTask" classpath="${proguard-jar}" /> <proguard> -injars ${compile-bin-ospath}\temp.jar -outjars ${compile-bin-ospath}\optimized.jar -libraryjars ${android-jar} -optimizationpasses 5 <!-- 指定代码的压缩级别 --> -dontusemixedcaseclassnames <!-- 是否使用大小写混合 --> -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* <!-- 混淆时所采用的算法 --> -include ${proguard-cfg} </proguard> <delete file="${compile-bin-ospath}\temp.jar"/> <mkdir dir="${compile-bin-ospath}\optimized"/> <unzip src="${compile-bin-ospath}\optimized.jar" dest="${compile-bin-ospath}\optimized"/> <delete file="${compile-bin-ospath}\optimized.jar"/> <echo>...代码混淆结束...</echo> </target> <!-- 将.class文件转化成.dex文件 --> <target name="dex" depends="optimize"> <echo>...开始将.class文件转化成.dex文件....</echo> <exec executable="${dx-bat}" failonerror="true"> <arg value="--dex" /> <!-- 输出文件 --> <arg value="--output=${dex-ospath}" /> <!-- 要生成.dex文件的源classes和libraries --> <arg value="${compile-bin-ospath}\optimized"/> <arg value="${external-lib-ospath}" /> </exec> <echo>...将.class文件转化成.dex文件完成....</echo> </target> <!-- 将资源文件放进输出目录 --> <target name="package-res-and-assets"> <echo>...开始将资源文件放进输出目录....</echo> <exec executable="${aapt-exe}" failonerror="true"> <arg value="package" /> <arg value="-f" /> <arg value="-M" /> <arg value="${manifest-xml}" /> <arg value="-S" /> <arg value="${resource-dir}" /> <arg value="-A" /> <arg value="${asset-dir}" /> <arg value="-I" /> <arg value="${android-jar}" /> <arg value="-F" /> <arg value="${resources-package-ospath}" /> </exec> <echo>...将资源文件放进输出目录完成....</echo> </target> <!-- 打包成未签证的apk --> <target name="package" depends="dex, package-res-and-assets"> <echo>...开始打包未签名的apk....</echo> <exec executable="${apkbuilder-bat}" failonerror="true"> <arg value="${unsigned-apk-ospath}" /> <arg value="-u" /> <arg value="-z" /> <arg value="${resources-package-ospath}" /> <arg value="-f" /> <arg value="${dex-ospath}" /> <arg value="-rf" /> <arg value="${srcdir-ospath}" /> <!-- 打包*.so文件 --> <arg value="-nf"/> <arg value="${external-lib-ospath}"/> </exec> <echo>...打包未签名的apk结束....</echo> </target> <!-- 对apk进行签证 --> <target name="jarsigner-exe" depends="package"> <echo>...开始对未签名的apk签名...</echo> <exec executable="${jarsigner-exe}" failonerror="true"> <arg value="-keystore" /> <arg value="${keystore-file-ospath}" /> <arg value="-storepass" /> <arg value="${storepass-key}" /> <!-- 密码 --> <arg value="-keypass" /> <arg value="${keypass-key}" /> <arg value="-signedjar" /> <arg value="${signed-apk-ospath}" /> <arg value="${unsigned-apk-ospath}" /> <!-- 不要忘了证书的别名 --> <arg value="8m" /> </exec> <echo>...未签名的apk签名结束...</echo> </target> <!-- 发布 --> <target name="release" depends="jarsigner-exe"> <!-- 删除未签证apk --> <delete file="${unsigned-apk-ospath}"/> </target> <!-- 打包的应用程序进行优化 对apk文件使用密钥进行签名后,一定要运行zipalign进行对齐。 这个工具能做到让那些未压缩的数据以特定的字节对齐。以4字节对齐能优化性能。 当对齐后,Android系统能通过 mmap()阅读文件, 即使它们包含二进制数据,而不是从包中拷贝所有的数据。 好处是在运行程序时减少了随机读取内存的消耗--> <target name="zipalign-exe" depends="release"> <echo>...开始对签名的apk签名进行优化...</echo> <exec executable="${zipalign-exe}" failonerror="true"> <arg value="-v" /> <arg value="4" /> <arg value="${signed-apk-ospath}" /> <arg value="${aligned-apk-ospath}" /> </exec> <echo>...对签名的apk签名进行优化结束...</echo> </target> <target name="_deploy" depends="zipalign-exe"> <!-- 删除为对齐的签证apk --> <delete file="${signed-apk-ospath}"/> <echo> 打包成功!apk路径为:${aligned-apk-ospath}</echo> </target> </project>ps:ant-contrib-1.0b3.jar的下载地址戳这里
proguard.cfg的文件我就贴出来了,混淆我相信应该都会懂一点,不懂得可以戳这里
以上就是Ant打签名apk的全部步骤,每一步都有注释作为解释。
分割线------------------------------------------------------------------------------------------------------------------
工程目录:
buildapp.properties
# This is an config file used to replace variable in buildapp.xml # Note: Use the '\\' instead of '\' # Note: -ospath absolute path # this name of android sdk path sdk-folder = ${env.ANDROID_SDK_HOME} # ths name of java jdk path java-home = ${env.JAVA_HOME} # this name of android sdk platform path sdk-platform-folder = ${sdk-folder}\\platforms\\android-23 # this name of android sdk tools path sdk-tools-folder = ${sdk-folder}\\tools # this name of android sdk platform-tools paht sdk-platform-tools-folder = ${sdk-folder}\\platform-tools # complier must contain this jar android-jar = ${sdk-platform-folder}/android.jar # Here is the build tool aapt-exe = ${sdk-platform-tools-folder}\\aapt.exe aidl-exe = ${sdk-platform-tools-folder}\\aidl.exe dx-bat = ${sdk-platform-tools-folder}\\dx.bat apkbuilder-bat = ${sdk-tools-folder}\\apkbuilder.bat jarsigner-exe = ${java-home}\\bin\\jarsigner.exe zipalign-exe = ${sdk-tools-folder}\\zipalign.exe # this name of proguard home path proguard-home = ${sdk-tools-folder}\\proguard # this name of use proguard's jar proguard-jar = ${proguard-home}\\lib\\proguard.jar #this name of proguard.cfg path proguard-cfg = ${basedir}\\proguard.cfg # javac memory size javac-forkOn-memoryinitialsize = 256m javac-forkOn-memoryMaximumSize = 256m # this name is compile file path compile-bin-name = bin-compile compile-bin-ospath = ${basedir}\\${compile-bin-name} #jars name org-jar-name = payeco_org.jar optimized-jar-name = payeco_plugin.jarbuildapp.xml
<?xml version="1.0" encoding="UTF-8"?> <project name="PayecoPayPluginBase" default="optimize"> <!-- 必须放在最前面,可以确保能使用到编译平台的环境变量 --> <property environment="env" /> <!-- 引入属性文件 --> <property file="buildapp.properties"/> <!-- java源文件目录 相对路径--> <property name="srcdir" value ="src" /> <!-- java源文件目录 绝对路径--> <property name="srcdir-ospath" value="${basedir}\${srcdir}" /> <!-- 外部类库所在目录 相对路径--> <property name="external-lib" value="libs" /> <!-- 外部类库所在目录 绝对路径--> <property name="external-lib-ospath" value="${basedir}\${external-lib}" /> <!-- 初始化工作 --> <target name="init"> <echo>...开始进行目录初始化...</echo> <delete dir="${compile-bin-ospath}" /> <mkdir dir="${compile-bin-ospath}" /> <echo>...目录初始化结束...</echo> </target> <target name="testOut"> <echo>${env.ANDROID_SDK_HOME}</echo> </target> <!-- 将工程中的java源文件编译成class文件 --> <target name="compile" depends="init"> <echo>...开始java源文件编译成class文件....</echo> <javac encoding="utf-8" source="1.6" target="1.6" srcdir="." deprecation="on" destdir="${compile-bin-ospath}" bootclasspath="${android-jar}" verbose="false" debug="true" fork="on" memoryinitialsize="${javac-forkOn-memoryinitialsize}" memorymaximumsize="${javac-forkOn-memoryMaximumSize}" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"> <compilerarg line="-Xlint:unchecked" /> <compilerarg line="-encoding utf-8 " /> <classpath> <fileset dir="${external-lib}" includes="*.jar" /> <fileset dir = "${sdk-platform-folder}" includes="*.jar"></fileset> <fileset dir="${sdk-tools-folder}\support" includes="*.jar"></fileset> </classpath> </javac> <echo>...java源文件编译成class文件完毕....</echo> </target> <!--将.class 混淆--> <target name="optimize" depends="compile"> <echo>...开始代码混淆...</echo> <jar basedir="${compile-bin-ospath}" destfile="${compile-bin-ospath}\${org-jar-name}"/> <taskdef name="proguard" classname="proguard.ant.ProGuardTask" classpath="${proguard-jar}" /> <proguard> -injars ${compile-bin-ospath}\${org-jar-name} -outjars ${compile-bin-ospath}\${optimized-jar-name} -libraryjars ${android-jar} -include ${proguard-cfg} </proguard> <mkdir dir="${compile-bin-ospath}\optimized"/> <unzip src="${compile-bin-ospath}\${optimized-jar-name}" dest="${compile-bin-ospath}\optimized"/> <echo>...代码混淆结束...</echo> </target> </project>同样混淆文件proguard.cfg我也不贴出来了。
以上就是Ant大混淆jar的全部步骤,其实和上面打签名apk差不多。
分割线------------------------------------------------------------------------------------------------------------------
<!-- 将工程中的java源文件编译成class文件 --> <target name="compile" depends="init"> <echo>...开始java源文件编译成class文件....</echo> <javac encoding="utf-8" source="1.6" target="1.6" srcdir="." deprecation="on" destdir="${compile-bin-ospath}" bootclasspath="${android-jar}" verbose="false" debug="true" fork="on" memoryinitialsize="${javac-forkOn-memoryinitialsize}" memorymaximumsize="${javac-forkOn-memoryMaximumSize}" compiler="org.eclipse.jdt.core.JDTCompilerAdapter"> <compilerarg line="-Xlint:unchecked" /> <compilerarg line="-encoding utf-8 " /> <classpath> <fileset dir="${external-lib}" includes="*.jar" /> <fileset dir = "${sdk-platform-folder}" includes="*.jar"></fileset> <fileset dir="${sdk-tools-folder}\support" includes="*.jar"></fileset> </classpath> </javac> <echo>...java源文件编译成class文件完毕....</echo> </target>看上面的代码,我javac的compiler用的是org.eclipse.jdt.core.JDTCompilerAdapter,jdk的带的编译约束较多,有的时候Eclipse编译通过了,用jdk的编译还是失败。所以我就换成了Eclipse的了。
换成Eclipse之后注意要改一下ant的run as:
选择第一个,就ok了。
相关文章推荐
- Eclipse下Ant自动打包,混淆和签名
- Eclipse下Ant自动打包,混淆和签名
- android ant 打包全过程 包含library,so,jar,混淆,签名
- Eclipse下Ant自动打包,混淆和签名
- Eclipse下配置Ant脚本 自己主动打包带签名的Android apk
- Ant打包jar,程序的混淆
- ant或perl混淆,打多渠道包,此jar包含证书链未验证的条目 无法签名的问题解决办法
- ant 打包生成APK与eclipse打包生成APK比较
- [Android] mac上申请签名及使用ant自动编译打包签名APK
- android Ant批打包学习(一):生成没有签名的apk
- 使用ant让Android自动打包的build.xml,自动生成签名的apk文件(支持android4.0以上的版本)
- proguard代码混淆并通过ant进行apk打包
- 使用ant让Android自动打包的build.xml,自动生成签名的apk文件(支持android4.0以上的版本)
- android 应用 Ant脚本自动编译、打包、代码混淆、签名、安装等
- android Ant批打包学习(二)---生成有签名且混淆的apk包
- Android 自动化发布—采用Ant打包的完美实现:编译、合并、签名、混淆、优化、自动运行
- android ant 最简单的打包签名,混淆方法
- 使用android sdk 实现 ant 打包 签名 混淆
- 在Eclipse里调用ant执行编译、打包、混淆
- android ant 最简单的打包签名,混淆方法