2017-05-07 81 views
0

我一直看在Android工作室productFlavors功能的教程,我真的覺得雜亂,我拿出一些問題,productFlavours和包在android系統

1)好吧,我明白buildtypes任何模塊,你有2種構建類型發佈和調試,我們可以配置版本,我們不需要配置debug作爲它的配置默認情況下,如果我們必須做,我們可以從initWith開始,到底是什麼是jnidebug,是除調試以外的其他東西?

2)他們在gradle腳本中添加productFlavors,在2個flavor中添加productFlavors,在每個flavor中添加.flavorName的包名稱,之後他們創建了兩個與main相同名稱的包,爲什麼不是我們在每個flavor中聲明的包名productFlavor?像com.example.xx.flavor1和com.example.xx.flavor2? 爲什麼與main的包名相同,那麼applicationIDSuffix的目的是什麼?

3)然後他們在每個flavor中創建了兩個類,並在主文件夾的mainActivity.java中訪問它的方法,我們可以像它能從mainActivity.java中的flavours.java中取得方法那樣反轉它,以及如果我們有不同包名稱,mainActivity的方法仍然可用於每個flavours.javas?

回答

0

很多關於您的問題的細節可以在此頁面找到:Gradle Definitions and Configurations。但進一步澄清你的問題,我可以改進你的問題的答案。

對於問題1:我不確定jnidebug從哪裏來。可以是文件夾和源集的一部分。

對於問題2:productFlavor將創建不同的應用程序,但具有相同的代碼庫。例如,一個會造成應用程序的兩個版本,比方說,一個免費版本和付費版本,則免費版本包含的實現來展示廣告,但付費版本沒有。要做到這一點,免費版本包含版本和邏輯代碼不同於付費版本。但是兩者都將共享相同的main基本代碼。此外,一些具有不同風格的應用程序可能都需要在Android上安裝,以便它們共存。爲了讓他們擁有不同的應用程序ID,否則Android會覆蓋第一個安裝的帶風格的應用程序。爲此,開發人員將創建一個基礎應用程序ID(大部分時間將類似於com.example.app)。然後在風格配置中,開發人員將applicationIDSuffix設置爲類似風格,以便讓Android安裝這兩個應用程序。假設我們必須口味,基地擴展,並在build.gradle擴展applicationIDSuffix '.extended'集。當編譯和構建這兩種風味時,將會有兩個應用程序,基地與應用程序ID com.example.app,和擴展com.example.app.extended。因此,Android將安裝兩個沒有任何問題。

對於問題3:當然!並且要小心,雖然會有不同的應用程序具有不同的應用程序ID,但它們的代碼將具有相同的包名稱。代碼包名稱和應用程序ID是不同的,並且不相互關聯,儘管大多數時候它們是相同的。在編譯時會發生什麼,gradle會將來自flavor的代碼與main合併,並在相同的包名下編譯它們,例如com.example.app。但AndroidManifest.xml將包含您選擇編譯的風味設置的應用程序ID,如com.example.app.flavor(如果設置了applicationIDSuffix '.flavor')。

+0

我們可以把現有的測試包名稱放在productflavours中,以便我們可以獲得現有測試包的apk嗎?比如當我們創建新產品時,我們看到3個軟件包名稱爲源代碼,其他2個爲測試 – blackHawk

+0

測試是另一個使用gradle和productFlavors的故事,但是是的。您可以在主要測試文件夾中包含基本測試代碼(默認情況下它們是兩個:test和androidTest),這些代碼將始終可用於任何風格,然後還具有特定測試文件夾和代碼,用於合併特定風味主要測試包/代碼編譯和構建選定的味道。爲了更好地理解它,在這個鏈接中籤出源代碼集:https://developer.android.com/studio/build/build-variants.html#sourcesets – ahasbini

+0

@blackHawk我的答案爲你解決了嗎? – ahasbini