2017-01-13 16 views
5

現在我有gradle這個2個productFlavors。我需要添加第三個。兩種現有的產品口味幾乎分享一切。叫他們貓和狗 - 他們都是動物。我需要添加的第三個風格實質上是應用程序的沙盒版本。我們可以稱之爲自行車。三個產品口味:兩個非常相似的,一個小的,但不同的

說我的應用程序現在有十二個活動全部由貓與狗共享。但自行車產品的味道應該只能訪問其中的三種活動,而自行車需要有自己的發射器活動。我如何重構我的代碼以適應這種智能?再次,兩種口味分享幾乎所有東西,而一種口味與另外兩種口味分享得少得多。

UPDATE

似乎有解決這個使用Change default source set configurations一個聰明的辦法。基本上,我會保持/main sourceSet爲所有的在整個應用普遍;一個/dogCat sourceSet適用於Dog和Cat共有的所有內容;和一個/bike sourceSet只屬於自行車。

已經想通了這麼多,我仍然有寫gradle這個sourceSets部分

android { 
    ... 
    sourceSets { 
    . . . 
    } 
} 
一些問題
+0

我解釋了答案,請檢查並告訴我。如果它對你有幫助。 – Shekhar

+0

檢查下面的答案 –

+0

檢查這個答案有類似的實現。 http://stackoverflow.com/questions/40302977/while-using-product-flavours-what-files-are-common-in-each-flavour-and-what-file/40303385#40303385希望這可以幫助.... – Stallion

回答

0

你可以嘗試以下方法2:

  • 實施的所有活動中的主味(爪哇/主與所有在搖籃共享定義風格)和各味Android清單應該僅參考他們需要工作的活動。在Proguard的幫助下,您可以確保未引用的活動中未使用的代碼不會部署到您的工件(APK)中。你可以有,當你在做每一個定義不同的發射味AndroidManifest.xml中

  • 與庫項目工作。通過這種方式,您可以加載每種風格的不同庫和不同的清單。

我會嘗試這個答案與一些例子在其他一些 時間延長。

3

保留主要味道中的所有常見類。例如,你有三種口味,貓,狗和自行車。在這三種口味中,貓和狗大部分是相同的,除了一些。另一方面,自行車也有一些常見的類別。

三種情形:

01.當所有的味道都有共同的功能

一樣,貓,狗和自行車都已經被命名爲一類爲PriceInformation。然後保持這個類的主要味道。

02.當貓和狗有相同的功能,但自行車不。

喜歡,貓和狗有一個共同的功能稱爲LifeSpan,然後保持這個類只有這個類。

03.當只有自行車有共同的功能,但其他兩個味道沒有。

然後保持這一特定的等級只適用於自行車風味。

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "com.productflavor" 
     minSdkVersion 14 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

    productFlavors { 

     cat { 
      applicationId "com.cat.theme" 
     } 
     dog { 
      applicationId "com.dog.theme" 
     } 
     bike { 
      applicationId "com.bike.theme" 
     } 
    } 
} 

Below is the Image I'm attaching.

因爲,MainActivity是常見的則在主味只提。

1

我想我是能夠解決我自己的問題。所有我需要做的就是

android { 
    ... 
    sourceSets { 
    main { 
     … 
    } 
    dog { 
     java.srcDirs = [‘dog_cat/java'] 
     … 
    } 
    cat { 
     java.srcDirs = [‘dog_cat/java'] 
     … 
    } 
    bike { 
     java.srcDirs = [‘bike/java’]//which is actually superfluous 
     … 
    } 
    } 

現在我要測試,以確認

+0

我想你想要'java.srcDir'src/dog_cat/java'',它添加了一個源代碼目錄而不是'=',它覆蓋了默認配置。 –

1

您可以創建項目的多種口味只要按照下面的步驟:

步驟1.複製水庫。 App/src/res文件夾並粘貼到App/src/YourFlavourName(Cat/Dog/Bike)/ Res。

步驟2.應用的build.gradle

機器人{

productFlavors { 

    Cat { 
     applicationId = "com.cat" 
    } 

    Dog { 
     applicationId = "com.dog" 
     versionCode 1 
     versionName "1.0" 
    } 

    Bike { 
     applicationId = "com.bike" 
     versionCode 1 
     versionName "1.0" 
    } 

    } 

sourceSets {

main { 
     aidl.srcDirs = ['src'] 
     renderscript.srcDirs = ['src'] 
     jniLibs.srcDirs = ['libs'] 
    } 

    Cat { java.srcDirs = ['src/Cat/java', 'src/Cat/java/'] } 
    Dog { java.srcDirs = ['src/Dog/java', 'src/Dog/java/'] } 
    Bike { java.srcDirs = ['src/Bike/java', 'src/Bike/java/'] } 

} 

}

步驟3:機器人Studi住宅的左側Ø有兩個滑動選擇喜愛並建立在構建一些變體的一些變體 enter image description here 單擊並選擇BuildVarient的運行perticulat味道

第4步:運行器件的應用

1

@Nouvel Travay,看看會發生什麼是當你定義不同的應用程序行爲方式。假設如果你想以不同的風格顯示不同的字符串,那麼你將需要單獨定義那些不同風格的字符串。同樣,如果你想定義不同的行爲/功能,那麼你將不得不單獨定義這些行爲的風格。重要提示: - 文件名應該保持不變,就像你可以將MainActivity命名爲一種風味,但不是像S​​tartActivity那樣不同的名稱,對於其他風味的相同行爲。希望我讓你明白。隨意要求更多通關。

相關問題