2014-08-27 48 views
1

我有一個Android庫項目和一個應用程序,它使用該庫項目。在應用程序的文件的build.gradle我ProGuard的混淆整個應用程序,包括庫項目代碼:Android Gradle插件:productPlavors中的runProguard?

//from the app project 
buildTypes{ 
    release { 
     runProguard true 
     proguardFile 'proguard-project.txt' 
    } 
    debug{ 
     runProguard false 
    } 
} 

一切運作良好,的lib項目和應用項目都得到混淆就好了。 但是,我想建立我的lib項目「獨立」,所以我可以分發它沒有應用程序項目。這當然意味着它自己混淆了lib項目。

我不能使用buildTypes代碼在lib項目build.gradle,只是運行ProGuard的,因爲這將打破應用項目建設,因爲那時建立的應用程序將彙編的代碼agains已經混淆的lib項目做到這一點代碼... :-)

我需要的是運行ProGuard的可能性只有如果我在「獨立」模式下構建lib項目,例如通過傳遞參數或執行特殊任務。

任何人都可以指向正確的方向嗎?

+0

你的圖書館是你的項目中的一個模塊嗎?你可以爲你的庫模塊創建一個build.gradle,它有自己的proguard配置文件。您的庫公用方法的名稱不能被混淆。 – MartinCR 2014-08-27 11:18:57

+0

「這當然意味着對自己的lib項目進行混淆」 - 你說的是什麼?絕大多數以AAR形式發佈的Android庫項目不會被混淆。 – CommonsWare 2014-08-27 11:29:29

+0

@CommonsWare:當然,我只能爲自己說話,而我(或:我的僱主)卻沒有通過反編譯得到我們的代碼。 – 2014-08-27 11:44:47

回答

0

自己解決了。在lib項目的構建文件我有兩個buildtypes我發佈他們兩個:

publishNonDefault true 

和構建類型:

buildTypes { 
    debug { 
     debuggable true 
     runProguard false 
    } 

    release { 
     runProguard true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' 

    } 

} 

這將導致要創建的debugrelease APK。在我的應用程序項目的構建文件我然後通過聲明的依賴添加的顯式依賴於debug configuration如下:

dependencies{ 
    compile project(path: ':FancyLibProject', configuration: 'debug') 
    //... 
} 

當然在應用項目中我也有兩個構建類型調試和發佈,這反過來又調用ProGuard的方式與lib項目相同。
注意:我省略了發佈版本的簽名配置 - 沒有那些APK將無法安裝

相關問題