2016-12-04 57 views
0

在我的項目中,我有兩種口味(免費和付費)。有償人員有一些活動可以擴展主要軟件包中的活動,並且還有許可實施。我現在試圖以這種方式設置我的清單,它總是打開與當前風味相關的活動。怎麼做?Android Flavor related Intent

我現在就這樣做。

if(isFree) 
    startActivity(new Intent(this, ActivityA.class)); 
else 
    startActivity(new Intent(this, com.project.app.paid.ActivityA.class)) 

問題是免費版抱怨說它不知道包「com.project.app.paid。」。這很好,因爲proguard刪除它。

+0

這是什麼不同於[你的問題在這裏](http://stackoverflow.com/questions/40858582/android-flavor-intent-activity)? –

+0

一種可能性是爲兩個活動添加一個私有操作的'',然後使用'android:exported =「false」'來防止第三方應用程序啓動這些活動。然後,使用該動作字符串使用「Intent」。 – CommonsWare

+0

@Mike M.這不起作用,因爲這些活動永遠不會被明確地調用,所以它們被proguard刪除,我不能設置賞金來推動這個問題。 – XxGoliathusxX

回答

0

我知道這是舊帖子,但由於沒有得到答覆,讓我指出你在後面的方向,以防其他人遇到這個帖子。

你可以在口味上做很多事情,但你要做的事情要比任何人的回答都簡單得多。

首先,您有一個構建變體來選擇您的調試和運行風味。所以使用這個,否則所有的調試都將使用默認的主版本。其次,您不必獲取包名稱,只需使用構建配置標誌或檢查風味即可。 I.E.

android { 
    signingConfigs { 
     releaseA35Demo { 
      storeFile file("$projectDir/../yaskeystore.jks") 
      storePassword System.getenv('YOUR_APP_STUDIO_STORE_PASSWORD') 
      keyAlias System.getenv('YOUR_APP_STUDIO_KEY_ALIAS') 
      keyPassword System.getenv('YOUR_APP_STUDIO_KEY_PASSWORD') 
     } 
    } 

    flavorDimensions 'default' 

    productFlavors { 
     a35Demo { 
      dimension 'default' 
      applicationId "com.appstudio35.yourappstudio" 
      buildConfigField "String", "SERVER_URL", '"http://fakeNumbers.compute-1.amazonaws.com:3006"' 
      buildConfigField "int", "BUSINESS_ID", "1" 
      versionCode 1 
      versionName "0.01.01-b1" 
      minSdkVersion 21 
     } 
     a35DemoDev { 
      dimension 'default' 
      applicationId "com.appstudio35.yourappstudio.dev" 
      buildConfigField "String", "SERVER_URL", '"http://fakeNumbers2.compute-1.amazonaws.com:3006"' 
      buildConfigField "int", "BUSINESS_ID", "2" 
      versionCode 1 
      versionName "0.01.01-b1" 
      minSdkVersion 21 
     } 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 

      productFlavors.a35Demo.signingConfig signingConfigs.releaseA35Demo 
      productFlavors.a35DemoDev.signingConfig signingConfigs.releaseA35Demo 
     } 
    } 
} 

然後簡單地引用它的代碼,如:

BuildConfig.BUSINESS_ID 

無論你需要它。只要確保在自動導入BuildConfig時不會意外使用庫項目的BuildConfig。

接下來的方法是,如果你想檢查你的味道,你可以簡單地做 BuildConfig.FLAVOR看看你在哪一個。但是請記住,有一些關於使用它的編譯器警告,因爲您正在檢查一個風格,並且BuildConfig會假定它總是會成爲Build Variant下拉列表中的任何內容,這是不正確的,您可以忽略它始終爲真或總是虛假的警告,我向你保證它的工作。

最後,您的包由您正在調試的構建變體驅動。我將添加一個圖像,以便您可以看到要更改的位置。

enter image description here

希望有所幫助。

但是我要說的最後一件事是您的MainActivity會自動處理,您不必管理MainActivity的Package就可以啓動它。它將爲您所使用的風格使用相應的風味。通常,當您將文件移動到風格時,您可以製作風格和變體,以便使用相應的MainActivity。你在做什麼有點冒險,但我想它是有效的。但是,建議讓味道工具做它的工作,併爲您啓動它。

只需從Main中刪除MainActivity,並確保它是在您的兩種口味付費和免費的,你很好去。例如,請注意我沒有應用程序文件夾或文件在我的主:

enter image description here

現在看到清單指向它仍。

enter image description here

所以,如果你讓味道做的工作,你會被罰款。如果您嘗試將其留在主體中,則必須處理衝突和警告。