Android ANT一键生成混淆后的JAR

一、安装与配置Ant

添加系统环境变量:ANT_HOME,该变量指向Ant解压后的根目录,在系统环境变量path中添加Ant的bin目录(%ANT_HOME%\bin)。

二、更新Android项目

运行cmd命令:android update project -t sdk版本编号  -p 项目根目录

该命令需要先配置系统path,不配置也可以,直接调起批处理文件:AndroidSdk安装目录\tools\android.bat

sdk版本编号可通过该命令列出:android list targets

运行后,项目的根目录将生产 build.xml 及 local.properties

三、修改配置文件

按个人喜好编写即可,以下是仅供参考:

local.properties
sdk.dir=D:\\Program Files\\adt-bundle-windows\\sdk
diyJavaFilePath=bld/java
diyClassFilePath=bld/class
diyClsJarFile=bld/src.jar
diyOptJarFile=bld/blur.jar
diyDexFileFolder=bld
diyReleaseFilePath=bld/release.jar
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="antMain" default="dex_jar">

    <property file="local.properties" />
    <property file="ant.properties" />
    <property environment="env" />
    <loadproperties srcFile="project.properties" />
    <import file="custom_rules.xml" optional="true" />
    <import file="${sdk.dir}/tools/ant/build.xml" />

    <!-- 引入Android依赖 -->
    <property name="lib.android" value="${sdk.dir}\platforms\${target}\android.jar"/>
    <!-- 引入混淆依赖 -->
    <property name="lib.proguard" value="${sdk.dir}\tools\proguard\lib\proguard.jar"/>
    <!-- 引入lib依赖 -->
    <property name="lib.selflib" value="E:\java\workspace\base\bin\base.jar"/>
    <!-- 混淆命令(当前系统为windows,如果系统为linux,可将.bat文件替换成相对应的命令) -->  
    <property name="dx" value="${sdk.dir}\build-tools\android-4.4.2\dx.bat" />
    
    <!-- 声明依赖的jar -->
    <path id="dependencies">  
        <fileset dir="E:\java\workspace\">
            <include name="base/bin/*.jar" />
        </fileset>  
    </path> 
    
    <!-- 拆分java文件(通过拷贝命令) -->
    <target name="separate_java">
        <!-- diyJavaFilePath自定义java文件存放的文件路径 -->
        <delete dir="${diyJavaFilePath}" />
        <mkdir dir="${diyJavaFilePath}" />    
		<copy todir="${diyJavaFilePath}">
			<fileset dir="${basedir}/src"> 
				<include name="com/**/*.java" /> 
			</fileset> 
			<fileset dir="${basedir}/gen"> 
				<include name="com/**/*.java" /> 
			</fileset> 
		</copy>
    </target>
    
    <!-- 编译java文件(生成class文件) -->
    <target name="compile_java" depends="separate_java">
        <!-- diyClassFilePath自定义class文件存放的文件路径 -->
        <delete dir="${diyClassFilePath}" />
        <mkdir dir="${diyClassFilePath}" />
        
        <javac encoding="UTF-8" target="1.6" debug="false" extdirs=""  
                srcdir="${diyJavaFilePath}"  
                destdir="${diyClassFilePath}"  
                includeAntRuntime = "false"
                bootclasspath="${lib.android}"> 
        	<classpath refid="dependencies" />
        </javac>
    </target>  
    
    <!-- 混淆class文件 -->
    <target name="optimize_class" depends="compile_java">  
        <!-- diyClsJarFile自定义原始JAR文件名 -->
        <delete file="${diyClsJarFile}"/>  

        <jar destfile="${diyClsJarFile}">
        	<fileset dir="${diyClassFilePath}" includes="**/*.class"/>
        </jar>
        
        <!-- diyOptJarFile自定义混淆JAR文件名 -->
        <delete file="${diyOptJarFile}"/>
        
        <java jar="${lib.proguard}" fork="true" failοnerrοr="true">  
            <jvmarg value="-Dmaximum.inlined.code.length=32"/>  
            <arg value="-injars ${diyClsJarFile}"/>  
            <arg value="-outjars ${diyOptJarFile}"/>  

            <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="-keepattributes Exceptions,*Annotation*,EnclosingMethod"/>
            <arg value="-keep public class com.**.*{public <fields>;<methods>;}"/>
            
        </java>  
        
    </target>
    
    <!-- DEX-JAR文件 -->
    <target name="dex_jar" depends="optimize_class">
        <!-- 自定义dex文件路径 -->
        <delete file="${diyDexFileFolder}/classes.dex"/>
        
        <exec executable="${dx}" failοnerrοr="true">  
            <arg value="--dex" />  
            <arg value="--output=${diyDexFileFolder}/classes.dex" />  
            <arg value="${diyOptJarFile}" />  
            <arg value="${basedir}/libs" />
        </exec >
        
        <!-- 自定义将dex文件打成Jar包后的文件路径 -->
        <delete file="${diyReleaseFilePath}"/>
        
		<jar destfile="${diyReleaseFilePath}">
            <fileset dir="${basedir}/${diyDexFileFolder}">  
		        <include name="**/*.dex" />
		    </fileset>
        </jar>
	</target>
	
    <!-- 执行命令(可选操作):java -jar jarName args -->
    <target name="cmd_jar" depends="dex_jar">
        <java jar="${jarUtilName}" fork="true" failοnerrοr="true">  
		   <jvmarg value="-Dmaximum.inlined.code.length=32"/>  
		   <arg value="${arg1}"/>  
           <arg value="${arg2}"/>  
           <arg value="${arg3}"/> 
           <!-- arg4... -->
		</java>
    </target>
    
    <!-- 合并文件(可选操作) -->
    <target name="release" depends="dex_jar">
        <delete file="${file_release}"/>
        <!-- 
        	举例将 ${diyFileA}与 ${diyFileBPath}/${diyFileBName}打到一起
        	最终目录结构:
        	${diyFileA}
        	assets/${diyFileBName}
        -->
        <jar destfile="${file_release}">
            <zipfileset src="${diyFileA}"/>
            <zipfileset dir="${basedir}/${diyFileBPath}" prefix="assets">
			    <include name="${diyFileBName}"/>
			</zipfileset>
        </jar>
    </target>
</project>

在项目的根目录运行ant命令,即可生产混淆后的jar包(在项目根目录的bld文件夹下)。
本方法适用于作为LIB的JAR包开发,若需要生产DEX文件、生成APK文件、对APK签名等操作还需要更多的工作。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值