使用Android Ant在編譯時間混淆

來源:互聯網
上載者:User

關於ANT 編譯和指令碼請查看 : http://sinfrancis.javaeye.com/blog/721582

 

這裡使用的是proguard4.4 ,在原有的ANT指令碼上加入以下代碼:

定義proruard4.4 的home :

 

Xml代碼 
  1. <property name="proguard-home" value="D:/eclipsetools/proguard4.4/lib"/>   

 

加入混淆的target配置到build.xml中去:

 

Xml代碼 
  1. <!--Execute proguard class flies-->  
  2. <target name="optimize">  
  3.     <jar basedir="${outdir-classes}" destfile="temp.jar"/>  
  4.     <java jar="${proguard-home}/proguard.jar" fork="true" failonerror="true">  
  5.         <jvmarg value="-Dmaximum.inlined.code.length=32"/>  
  6.         <arg value="-injars temp.jar"/>  
  7.         <arg value="-outjars optimized.jar"/>  
  8.         <arg value="-libraryjars ${android-jar}"/>  
  9.       
  10.         <!--  <arg value="-libraryjars ${external-libs}/*.jar"/>-->  
  11.         <arg value="-dontpreverify"/>  
  12.         <arg value="-dontoptimize"/>  
  13.         <arg value="-dontusemixedcaseclassnames"/>  
  14.         <arg value="-repackageclasses ''"/>  
  15.         <arg value="-allowaccessmodification"/>  
  16.         <!--<arg value="-keep public class ${exclude-activity}"/>-->  
  17.         <!--<arg value="-keep public class ${exclude-provider}"/>-->  
  18.         <arg value="-keep public class * extends android.app.Activity"/>  
  19.         <arg value="-keep public class * extends android.content.ContentProvider"/>  
  20.         <arg value="-keep public class * extends android.view.View"/>  
  21.   
  22.         <arg value="-keep public class * extends android.preference.Preference"/>            <arg value="-optimizationpasses 7"/>  
  23.         <arg value="-verbose"/>  
  24.         <arg value="-dontskipnonpubliclibraryclasses"/>  
  25.         <arg value="-dontskipnonpubliclibraryclassmembers"/>  
  26.     </java>  
  27.     <delete file="temp.jar"/>  
  28.     <delete dir="${outdir-classes}"/>  
  29.     <mkdir dir="${outdir-classes}"/>  
  30.     <unzip src="optimized.jar" dest="${outdir-classes}"/>  
  31.     <delete file="optimized.jar"/>  
  32. </target>  

 

 

注意:-keep這個參數是表示哪些類不被混淆,具體查看progurard的文檔。這裡凡是在xml檔案中配置的檔案均不可混淆,否則運行時候會找不到類的。

 

在編譯的 target中加入 調用混淆target的命令 :

 

Xml代碼 
  1. <antcall target="optimize"/>  

 

這樣既可。

 

如果你使用了xmlpull類庫的話,混淆的時候請不要加入到原始碼中,android的類庫中已經包含了 xmlpull,否則的話混淆是無法成功的,會出現

 

Warning: library class android.content.res.XmlResourceParser extends or implements program class org.xmlpull
.v1.XmlPullParser

 

等相關的錯誤。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.