2016-07-04 86 views
0

出於測試目的,我在我的應用程序中有一些開發人員設置。我有時候會包含一個查看庫,並嘗試最佳/最快的工作。即圖像加載器庫,如畢加索/滑翔/離子...Proguard - 排除庫

我有一個變量說,要使用哪個圖像加載器。用戶不能改變它,所以我想下面:

  • 我不想從我的項目中刪除庫(或評論包括外面和所有類),也許明天我有一些新的東西測試和我不希望再包括圖書館和再寫額外的代碼爲它
  • 我希望我的發佈版本完全排除導入庫,一點用都沒有

我認爲這是可能的通過proguard,有人可以告訴我這將如何工作,例如基於我發佈的3個圖像庫?或者這是不可能與proguard?

編輯

我接受的替代解決方案爲好,比如像C++ #ifdef左右(我想這是不是在java的可能,雖然)。或者一些預處理器解決方案,也許通過一個插件?

回答

1

你可以做到以下幾點:

build.gradle每個圖像加載LIB在buildType配置定義屬性

project.ext { 
    picassoEnabled = true 
    glideEnabled = false 
    ... 
} 

然後你就可以有選擇地添加保存有關庫附加規則:

buildTypes { 
    release { 
    proguardFile getDefaultProguardFile('proguard-android.txt') 
    proguardFile 'proguard-project.txt' 
    if (project.picassoEnabled) { 
     proguardFile 'proguard-picasso.txt' 
    } 
    if (project.glideEnabled) { 
     proguardFile 'proguard-glide.txt' 
    } 
    } 
} 

在庫的每個proguard配置文件中,您將有保留庫的規則:

-keep class com.squareup.picasso.** { *; } 

現在的重要組成部分,將未明確從應用程序中引用的每個庫,而是使用反射,這樣的ProGuard會在默認情況下刪除所有的庫(除了一個明確保留)。

+0

起初,這看起來相當不錯,直到我看到反射部分...這對我來說沒有選擇......但仍然,這是一個解決方案。我真的很喜歡C++風格的'#ifdef'來完全通過變量註釋代碼段落... – prom85