很久没有更新了,最近做了个小功能,想把代码打成 .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文件配置
常用基本配置不用管,注意其中几个地方:
1.
2.
3.
4.
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\\sdk
target=android-17
android.library=false
proguard.cfg=proguard.cfg
releaseJar=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 ;
}
-keep public class com.gn.qiaw.mn.PayCallBack {
public ;
}
-keepclasseswithmembernames class * {
native ;
}
-keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public (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 *;
}
-keep public class com.gn.qiaw.mn.Entry {
public static ;
}
-keep public class com.gn.qiaw.mn.PayCallBack {
public ;
}
Dx unsupported class file version 52.0
Conversion to Dalvik format failed with error 1