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 ...
随机推荐
- 算法提高 P1001【大数乘法】
当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法.具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果 ...
- java代码啊==indexOf()方法返回字符第一次出现的位置
package com.s.x; public class Wang { public static void main(String[] args) { if ("woaini" ...
- Java中的三元运算:a = (a > b)?a:b
格式:逻辑值 ? 表达式1 : 表达式2 执行顺序:先执行逻辑值,如果逻辑值为true,则执行表达式1:反之则执行表达式2 a = (a > b)?a:b 如果a>b成立,返回a: 如果a ...
- 洗碗机耗材:finish 亮碟 产品的选购
转发&补充两点 1.亮碟在国内销售的洗涤块是最低端的Classic,二合一产品(理论上必须配合软水盐和亮碟剂).国外很早就淘汰掉Classic级的洗涤块了,当前最低端的是Advanced(四合 ...
- 协议栈CheckList
协议?何谓协议?协议是用来干什么的? 与人类活动进行对比即可理解协议,因为我们无时无刻不在执行协议! 举一个典型交互过程: 人类协议(至少说是好的行为方式)要求一方首先进行问候(张三对李四“你好”), ...
- C# List泛型转换,int,string 转字符,转数组
List转字符串 List<string> List = new List<string>(); string strArray = string.Join(",&q ...
- laravel-ide-helper 遇到There are no commands defined问题怎么解决
laravel门面类的代码提示方案: https://github.com/barryvdh/laravel-ide-helper 按照步骤安装 1.composer require barryvdh ...
- [Z]LaTeX入门教程
LaTeX入门教程 Contents TEX/LATEX是什么? 为什么要用TEX/LATEX? 安装 开始使用 数学符号使用中文文章的各个部分表格 行内公式与行间公式 上标与下标 常见的数学公式 行 ...
- 来谈谈 WebAssembly 是个啥?为何说它会影响每一个 Web 开发者?
作者:link 原文:What is WebAssembly and why it affects web developers! 你听说过WebAssembly吗?这是由Google, Micros ...
- Spring与Redis的实现
前言 Redis作为缓存还是相当不错的,一定程度上缓解了数据库的IO操作,具体不多说,具体网上查找资料. 实战 不多说,直接上代码. 第一步:所需要的依赖 <!-- redis --> & ...