2017-04-04 39 views
2

問題聲明: 我想僅在開發環境中使用庫,但不在發佈版(應用商店版本)上使用庫。 而且我不希望這個庫也可以在發佈apk中生成。Android:加載庫並僅將其用於開發分支不用於發佈

我appraoch:

所以,我有一個環境的設置是這樣的:

發展 -

  1. 調試
  2. 發佈

商店 -

  1. 調試
  2. 發佈 - >這正好play商店

在gradle這個我已經加入 -

debugCompile 'com.some.library' 

它加載這個庫發展 - 調試商店 - 調試

和然後,我創建了兩個應用程序類,

  1. ApplicationWithoutDebugLibrary延伸MultiDexApplication - 不初始化庫的應用程序類。
  2. ApplicationWithDebugLibrary延伸ApplicationWithoutDebugLibrary - 應用類初始化庫

而且我在gradle這個定義來裝入不同的味道不同的應用程序文件。

productFlavors { 
      Development { 
       applicationId "xyzzzz" 
       manifestPlaceholders = [application:"com.xyz.ApplicationWithDebugLibrary"] 
      } 
      store { 
       applicationId "11111" 
       manifestPlaceholders = [application:"com.xyz.ApplicationWithoutDebugLibrary"] 
      } 
} 

而在清單我寫了這個:

<application 
    android:name="${application}"... 

所以,對於調試它工作正常,但是當我建立網店發佈/開發,發佈APK是不能夠編譯ApplicationWithDebugLibrary .java,因爲我正在使用該庫,該庫並未在Gradle文件中編譯以獲得發佈版本。

那麼,有沒有什麼方法可以避免將這個類加載到Store版本風格,或者我可以在開發環境中只加載該庫的任何替代解決方案。

回答

2

所以對於調試它工作正常,但當我建立網店發佈/開發,發佈APK是不能夠編譯ApplicationWithDebugLibrary。java的,因爲我使用的圖書館,這是不是在gradle這個文件編譯爲釋放香味

通過邏輯沒有辦法神奇地刪除您的代碼使用庫,還都remainings正確編譯,因爲只是簡單地失蹤符號。所以你必須創建「虛擬」庫,使用與你的調試相同的API,但沒有方法體。或者,您可以用一些代碼封裝您的庫,以便以後可以交換生產版本,而不使用庫依賴關係。

Android的搖籃插件可以幫助不同版本的基於的是什麼類型的構建依賴關係的構建:

的編譯配置用於編譯主應用程序。 它中的所有內容都被添加到編譯類路徑中,並且還包含在最終APK中打包的 。還有其他可能的配置以 添加依賴於:

  • 編譯:主要應用
  • androidTestCompile:測試應用
  • debugCompile:調試生成類型
  • releaseCompile:發佈生成類型。

文檔:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Libraries-and-Multi-project-setup

+0

怎麼樣的gradle中類和編寫腳本動態加載做同樣的。 我不知道它是否可能,我已經在很多地方讀過它,只是好奇而已。 – aamitarya

+0

請更改您的評論。我不知道你的意思是什麼。 –

+0

我在問,我們可以使用動態類加載或在Gradle中編寫腳本來完成此操作,以根據某些條件編譯類。 – aamitarya

相關問題