1.加上ant编译功能。
android update project --name $ProjectName -t 3 -p $ProjectPath
此时会在项目根目录自动生成一个名为build.xml的ant脚本。
2.加入混淆
第一步在命令行中已经可以使用ant进行编译了。因为Android中是这样的,在输入命令ant debug的时候会自动调用{${AndroidSDK}\tools\ant\main_rules.xml目录下的规则文件,所以无需自己写ant脚本了。既然它会调用默认的规则文件(默认文件没有加入混淆功能),那么我们想要混淆,直接在这个规则文件上修改就好了。在名为-dex的target加入一个target,代码如下:
<target name="optimize" depends="compile">
<jar basedir="${out.classes.absolute.dir}" destfile="temp.jar"/>
<java jar="${AndroidSDK}/tools/proguard/lib/proguard.jar" fork="true" failonerror="true">
<jvmarg value="-Dmaximum.inlined.code.length=32"/>
<arg value="-injars temp.jar"/>
<arg value="-outjars optimized.jar"/>
<arg value="-libraryjars '${android.jar}'"/>
<!-- <arg value="-libraryjars ${library-jar}/some_lib_used.jar"/> -->
<arg value="-dontpreverify"/>
<arg value="-dontoptimize"/>
<arg value="-dontusemixedcaseclassnames"/>
<arg value="-repackageclasses"/>
<arg value="-allowaccessmodification"/>
<arg value="-keep public class * extends android.app.Activity"/>
<arg value="-keep public class * extends android.app.Service"/>
<arg value="-keep public class * extends android.content.BroadcastReceiver"/>
<arg value="-keep public class * extends android.content.ContentProvider"/>
<arg value="-keep public class * extends android.view.View"/>
<arg value="-optimizationpasses 1"/>
<arg value="-verbose"/>
<arg value="-dontskipnonpubliclibraryclasses"/>
<arg value="-dontskipnonpubliclibraryclassmembers"/>
<arg value="-ignorewarning"/>
</java>
<delete file="temp.jar"/>
<delete dir="${out.classes.absolute.dir}"/>
<mkdir dir="${out.classes.absolute.dir}"/>
<unzip src="optimized.jar" dest="${out.classes.absolute.dir}"/>
<delete file="optimized.jar"/>
</target>
接着在名为-dex的target中进行一个混淆依赖:
<target name="-dex" depends="compile, optimize, -post-compile, -obfuscate"
unless="do.not.compile">
<if condition="${manifest.hasCode}">
<then>
<dex-helper />
</then>
<else>
<echo>hasCode = false. Skipping...</echo>
</else>
</if>
</target>