ant+proguard签名打包 .jar
ant+proguard签名打包 .jar
摘自: https://blog.csdn.net/a_ycmbc/article/details/53432812
很久没有更新了,最近做了个小功能,想把代码打成 .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\\sdk
-
target=android-17
-
android.library=false
-
proguard.cfg=proguard.cfg
-
releaseJar=output.jar
再配置proguard.cfg文件,此文件就是混淆要设置的,哪些类的方法要公开,哪些类的方法要混淆,都是在这里设置
-
-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.0
-
Conversion to Dalvik format failed with error 1
ant+proguard签名打包 .jar的更多相关文章
- android自动打包方法(ant+proguard+签名)
前段时间做了一个android的网游项目,现在优化减少体积和防止别人反编译,需要把编译后.class进行混淆,开始在网上看了一些关于 ProGuard的介绍,基本上都是使用ADT自带的打包方式,那个打 ...
- 三、Gradle初级教程——Gradle除了签名打包还能配置jar包
1.gradle概念 构建工具,Groovy,Java. 2.gradle配置jar包,和libs文件夹导入jar包的区别 到此,还是这种方法导入JAR包比较方便.每次更新JAR包,只需要修改版本号就 ...
- 在Eclipse上打包并使用Proguard工具混淆jar包
近期由于工作须要,学习到了Android jar包的打包与混淆. 之前觉得还是非常easy的,可是自己深入研究下,发现还是有一些东西须要注意的,并且自己也踩了一些坑,在这里写下供同僚们借鉴借鉴. 转载 ...
- Ant自动编译打包&发布 android项目
Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...
- Android --Android Stuido混淆签名打包
参考博客:Android studio 使用心得(五)—代码混淆和破解apk 参考博客:Android studio 使用心得(四)---android studio 多渠道打包 参考博客:Andro ...
- 通过ant脚本编译打包android工程
通过ant脚本,编译打包android工程 1.Android程序编译.打包.签名.发布的三种方式: 方式一:命令行手动编译打包 方式二:使用ant自动编译打包 方式三:使用eclipse+AD ...
- Android 混淆签名打包
1.混淆文件 proguard-rules.pro # Add project specific ProGuard rules here. # By default, the flags in thi ...
- Andorid进阶7—— Ant自动编译打包&发布 android项目
http://www.cnblogs.com/tt_mc/p/3891546.html Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Ecl ...
- Ant自动编译打包android项目(转载)
1.1 Ant安装 ant的安装比较简单,下载ant压缩包 http://ant.apache.org (最新的为1.9.3版本),下载之后将其解压到某个目录(本人解压到E:\Progra ...
随机推荐
- 在不适用fixed的前提下,当内容较少时footer固定在页面底部
使用css,参考国外的一个解决方法: http://ryanfait.com/resources/footer-stick-to-bottom-of-page/ How to use the CSS ...
- AngularJS.js: 杂项
ylbtech-AngularJS.js: 杂项 AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多 ...
- webView放弃capture()截图的替代方法
float scale = webView.getScale(); height = (int) (webView.getContentHeight() * scale + 0.5); bitmap ...
- html5的canvas方法的总结
canvas的方法 save()保存当前环境的状态 restore() 返回之前保存过的路径状态和属性 createEvent() getContext()返回一个对象,指出访问绘图功能必要的API ...
- 转-----FPGA工程师:持守梦想or屈于现实
昨晚无意间看到一段新闻频道对最近炒得火热的“史上最年轻教授”的专访,倒是他的一位同学对于梦想的“现实版”解说颇有些耐人寻味.大体意思是说“拼了老命考上一所梦寐以求的大学,父母辛辛苦苦交了学费,我们却 ...
- Python代码审计中一些需要重点关注的项
SQL注入: 如果是常规没有进行预编译,或者直接使用原生的进行拼凑,那么在view的时候就需要多去观察了 [PythonSQL预编译]https://www.cnblogs.com/sevck/p/6 ...
- MyBatis Generator模板
注:注意替换红色部分 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generator ...
- svn关键词BASE, HEAD, COMMITTED, PREV的深入理解
svn关键词BASE, HEAD, COMMITTED, PREV可以很方便用于日常操作中,但是很多人对他们的工作原理和方式不是太了解. 在这里我将使用用例,诠释他们的作用和意图. 先给出svn手册中 ...
- Tkinter Anchors(锚)
Python GUI - Tkinter Anchors: 锚是用来定义文本的相对位置参考点 锚是用来定义文本的相对位置参考点. 这里是锚属性可以使用的常数列表. NW N NE W CENTER ...
- ui-router 留存
学习 ui-router - 路由控制 022014年01月 参考原文:https://github.com/angular-ui/ui-router/wiki/URL-Routing 在你的应用中大 ...