Android 配置 Ant 指令碼之程式碼混淆和優化

yangxi_001發表於2014-03-14

本文的目的是介紹怎麼樣配置android的ant自動化編譯指令碼,來實現編譯釋出版本時程式碼的混淆和程式碼的優化,利用的主要工具包括ant和proguard。

編譯環境

  • ant 版本 1.8.4
    F:\workspace\eReader>ant -version
    Apache Ant(TM) version 1.8.4 compiled on May 22 2012
  • java 版本 1.7
    F:\workspace\eReader>java -version
    java version "1.7.0_05"
    Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
    Java HotSpot(TM) Client VM (build 23.1-b03, mixed mode, sharing)

檔案配置

因為 Android 已經內建了 proguard 的支援,所以我們只需要進行配置啟用該功能即可。

  • 生成 build.xml 檔案
    F:\workspace\eReader>android update project -p .
  • 配置 local.properties 檔案
    sdk.dir會自動指向當前系統android的開發環境路徑,key.store和key.alias分別指向簽名檔案和簽名檔案的別名,這個需要自己製作,主要是release的時候需要使用

    sdk.dir=E:\\PROGRA~1\\android-sdk-windows
    
    key.store=F:\\Android\\android_key\\careychow.keystore
    key.alias=Carey
  • 配置 build.xml 檔案
    配置簽名演算法為 SHA1

     <?xml version="1.0" encoding="UTF-8"?>
     <project name="GAReader" default="help">
         .... 此處省略若干
    
         <presetdef name="signjar">
             <signjar sigalg="MD5withRSA" digestalg="SHA1" />
         </presetdef>
    
     </project>

自動化編譯

  • 執行編譯命令 ant release
       F:\workspace\eReader>ant release
  • 輸入簽名金鑰的密碼和簽名別名的密碼進行簽名
       ......
       -release-prompt-for-password:
        [input] Please enter keystore password (store:F:\Android\android_key\careych
    ow.keystore):
    careychow
        [input] Please enter password for alias 'Carey':
    careychow
       ......
    -release-sign:
         [echo] Signing final apk...
      [signjar] Signing JAR: F:\workspace\eReader\bin\GAReader-release-unsigned.apk
    to F:\workspace\eReader\bin\GAReader-release-unaligned.apk as Carey
      [signjar] 輸入金鑰庫的密碼短語:
     [zipalign] Running zip align on final apk...
         [echo] Release Package: F:\workspace\eReader\bin\GAReader-release.apk
    [propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop
    [propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop
    [propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop
    [propertyfile] Updating property file: F:\workspace\eReader\bin\build.prop
    
    -post-build:
    
    release:
    
    BUILD SUCCESSFUL
    Total time: 1 minute 36 seconds

常見錯誤

  • 去除 proguard 的警告資訊,尤其在自己引用第三方library的時候, 程式碼混淆的過程中,proguard分析當前所有的類庫,會警告有些類或者方法無法識別,因為這些都是第三方library自己編譯的,我們無法再去找它所依賴的其他包,只需要配置忽略這些警告即可,方法如下:
    配置 proguard.cfg 檔案,在檔案的最後加上要忽略的類

      ......
    -dontwarn java.awt.**,antlr.**,org.junit.**,jargs.gnu.**
  • 解決簽名錯誤 INSTALL_PARSE_FAILED_NO_CERTIFICATES
    目前在JDK7的版本和ant1.8.4會出現這個問題,如果不指明所使用的簽名演算法,則APK就無法正確簽名,在安裝的過程中就會出現如上的錯誤資訊,解決辦法就是在build.xml中指明簽名演算法。
    還有另外的解決方法,可參照如下文章:

總結

配置和啟用的過程倒是不復雜,主要就是出現的一些版本相容問題比較難解決,好了,內容就講解這麼多!

相關文章