ant+proguard签名打包 .jar
来源:互联网 发布:51wan软件 编辑:程序博客网 时间:2024/06/05 11:35
很久没有更新了,最近做了个小功能,想把代码打成 .jar文件给别人引用。除了基本的调用方法,其余核心代码都经过混淆打包。用到了ant+proguard,这里记录一下。
ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。常常用于Android开发用于混淆最终的项目,增加项目被反编译的难度。android的sdk中已经有此工具,在sdk\tools\proguard\lib\proguardgui.jar,打包是可以直接用此工具混淆,只是流程比较复杂,需要手动更改其中的配置。如图:
Ant是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点。跨平台性。Ant是纯Java语言编写的,所以具有很好的跨平台性。操作简单。Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。 Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。由于Ant构建文件 是XML格式的文件,所以很容易维护和书写,而且结构很清晰。Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。
安装和配置环境变量
到官方主页http://ant.apache.org下载新版的ant,得到的是一个apache-ant-bin.zip的压缩包。将其解压到你的硬盘上。
window中设置ant环境变量:
ANT_HOME C:/ apache-ant-1.8.1
path C:/ apache-ant-1.8.1/bin
classpath C:/apache-ant-1.8.1/lib
测试是否配置成功
ant执行需要一个build文件,此次项目用到的build文件配置
<?xml version="1.0" encoding="UTF-8"?><project name="ProjectName" basedir="." default="optimize_class" > <!-- 设置全局属性 --> <property file="project.properties" /> <property environment="env" /> <property name="encode" value="utf-8"/> <property name="debug" value="false"/> <property name="includeAntRuntime" value="false"/> <property name="target_version" value="1.7"/> <property name="src_dir" value="${basedir}\src"/> <!-- ======================================== 工程构建目录 ======================================== --> <property name="build_dir" value="${basedir}\build" /> <property name="java_build_dir" value="${build_dir}\java" /> <property name="class_build_dir" value="${build_dir}\class" /> <property name="jar_build_dir" value="${build_dir}\jar"/> <property name="unOptimize_jar_build_dir" value="${jar_build_dir}\unOptimize.jar"/> <!-- ======================================== 构建完成文件 ======================================== --> <property name="release_jar_dir" value="${basedir}\${releaseJar}"/> <!-- 声明第三方依赖的jar --> <path id="dependencies"> <fileset dir="${basedir}\libs"> <include name="**/*.jar" /> </fileset> </path> <!-- 引入Android依赖 --> <property name="lib.android" value="${sdk.dir}\platforms\${target}\android.jar" /> <!-- 引入混淆依赖 --> <property name="lib.proguard" value="E:\adt-bundle-windows-x86_64-20140702\sdk\tools\proguard\lib\proguard.jar" /> <!-- dx命令(当前系统为windows,如果系统为linux,可将.bat文件替换成相对应的命令) --> <property name="dx" value="${sdk.dir}\build-tools\24.0.1\dx.bat" /> <!-- 拆分java文件--> <target name="init"> <mkdir dir="${build_dir}" /> <mkdir dir="${java_build_dir}" /> <mkdir dir="${class_build_dir}" /> <mkdir dir="${jar_build_dir}" /> </target> <!-- 拆分java文件 --> <target name="separate_java" depends="init"> <copy todir="${java_build_dir}" > <fileset dir="${src_dir}" > <include name="com/project/package/*.java" /> </fileset> </copy> </target> <!-- 编译java文件 --> <target name="compile_java" depends="separate_java" > <javac bootclasspath="${lib.android}" debug="${debug}" destdir="${class_build_dir}" encoding="${encode}" includeAntRuntime="${includeAntRuntime}" srcdir="${java_build_dir}" target="${target_version}"> <classpath refid="dependencies" /> </javac> </target> <!-- 混淆class文件 --> <target name="optimize_class" depends="compile_java" > <!-- class文件生成jar包 --> <jar destfile="${unOptimize_jar_build_dir}" > <fileset dir="${class_build_dir}" includes="**/*.class" /> </jar> <!-- jar包进行混淆 --> <java failonerror="true" fork="true" jar="${lib.proguard}" > <jvmarg value="-Dmaximum.inlined.code.length=32" /> <arg value="-injars ${unOptimize_jar_build_dir}"/> <arg value="-outjars ${release_jar_dir}"/> <arg value="-libraryjars ${lib.android}"/> <arg value="-dontpreverify"/> <arg value="-dontoptimize"/> <arg value="-dontusemixedcaseclassnames"/> <arg value="-allowaccessmodification"/> <arg value="-optimizationpasses 7"/> <arg value="-verbose"/> <arg value="-dontskipnonpubliclibraryclasses"/> <arg value="-dontskipnonpubliclibraryclassmembers"/> <arg value="@${proguard.cfg}"/> </java> <!-- 删除构建目录 --> <delete dir="${build_dir}"/> </target></project>
常用基本配置不用管,注意其中几个地方:
1. <property file="project.properties" /> 指定文件,设置全局属性
2.<property name="encode" value="utf-8"/> 项目的编码格式
3.<property name="target_version" value="1.7"/> java的jdk版本
4. <include name="com/project/package/*.java" /> 需要混淆的java类,这里是将package包下面的所有类都混淆,可以根据自己的项目结构更改此处。
build.xml常用标签说明:
# This file is automatically generated by Android Tools.# Do not modify this file -- YOUR CHANGES WILL BE ERASED!## This file must be checked in Version Control Systems.## To customize properties used by the Ant build system edit# "ant.properties", and override values to adapt the script to your# project structure.## To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt# Project target.sdk.dir=E:\\adt-bundle-windows-x86_64-20140702\\sdktarget=android-17android.library=falseproguard.cfg=proguard.cfgreleaseJar=output.jar
-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontpreverify-dontwarn-dontnote-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*-dump proguard/class_files.txt-printseeds proguard/seeds.txt-printusage proguard/unused.txt-printmapping proguard/mapping.txt-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class com.android.vending.licensing.ILicensingService-keep public class com.gn.qiaw.mn.Entry {public static <methods>;}-keep public class com.gn.qiaw.mn.PayCallBack {public <methods>;}-keepclasseswithmembernames class * { native <methods>;}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int);}-keepclassmembers class * extends android.app.Activity { public void *(android.view.View);}-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}
最后,添加proguard文件夹,拷入需要引用的文件proguard.jar,proguardgui.jar,retrace.jar
-keep public class com.gn.qiaw.mn.Entry {public static <methods>;}-keep public class com.gn.qiaw.mn.PayCallBack {public <methods>;}
Dx unsupported class file version 52.0Conversion to Dalvik format failed with error 1
- ant+proguard签名打包 .jar
- 实现android应用程序自动打包(Ant+proguard+签名)
- 实现android应用程序自动打包(Ant+proguard+签名)
- Eclipse集成Ant 打包签名APK和打混淆jar
- Ant编译打包签名
- Android 签名打包 混淆代码 proguard
- maven+proguard第三方jar打包混淆
- 【备忘】Ant打包jar示例
- ant 打包可执行jar包
- 为打包文件签名(jar)
- ant将多个jar打包为一个jar
- Ant将多个jar打包为一个jar
- Ant将多个jar打包为一个jar
- Ant + Proguard
- android使用ANT打包,签名,混淆
- ant 签名android项目 + 打包 android 项目
- ant apk签名打包环境配置
- proguard代码混淆并通过ant进行apk打包
- RefreshLayout让你半小时以内完成一个列表界面
- 删除表的字段时,ID值同时也能删除
- 对于C语言中int main(int argc,char **argv)的理解
- Android自定义控件实现底部导航
- Java String.split()用法小结
- ant+proguard签名打包 .jar
- Java学习笔记之List
- GetVersionEx 获取系统版本信息
- Java poi Excel xls列号数字转字母
- 第十四周项目7—是否二叉排序树
- jQuery 动画篇
- PHP 技能树
- SpringMVC笔记系列(2)——@RequestMapping请求映射物理视图解析
- nginx 使用gizp压缩提高网站的传输速度