2016年4月8日 星期五

Android Studio 如何使用 Proguard 進行代碼混淆

 參考這個:
http://developer.android.com/intl/zh-tw/tools/help/proguard.html


其中最主要的是修改app目錄下build.gradle這個檔:

1.以下的 minifyEnabled 一定要設為true
2.還有把proguard的規則寫在app目錄下proguard-rules.pro這個檔.這是因為以下的設定:

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

3.如果Android Studio處理proguard的過程中出現 out of memory 的問題, 加以下內容:
dexOptions {
        javaMaxHeapSize "4g"

    }
4.出現 'META-INF/LICENSE.txt'或其他檔案重覆加入的問題, 加以下內容:

    packagingOptions {

        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'    }


build.gradle完整檔案內容如下:

apply plugin: 'com.android.application'

android {

    dexOptions {
        javaMaxHeapSize "4g"    }

    buildTypes {
        release {
            minifyEnabled true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'        }
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
       exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
       exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'    }
}
}


轉換到android studio, 使用proguard時, 我把 minifyEnabled 忘記改true了, 所以每次檢查代碼都未混淆. 特別寫下本文, 提醒自己.

proguard是否有作用, 請參考以下文章


如何得知proguard是否成功混淆原始碼


  © Blogger templates Psi by Ourblogtemplates.com 2008

Back to TOP