0

如何根据风味创建活动的意图?Android风味意图活动

层次:

main 
-ActivityA 

flavor(free) 
-uses main/ActivityA 

flavor(paid) 
-uses own paid/ActivityA 

那么如何创建根据当前的味道意图是什么?

+0

你可以为每个flavor添加一个BuildConfig字段,并检查'if(field == free){launch free} else {launch paid}' –

+0

问题是免费版不知道付费软件包。 – XxGoliathusxX

+0

所以即使它没有使用它声明它是一个错误 – XxGoliathusxX

回答

2

你可以通过它的名字得到Activity类。这样你就不会收到编译错误:

Intent i = new Intent(this, Class.forName("com.xxx.packagename.paid.ActivityA")) 
-1

创建打造的口味为

productFlavors { 
    paid { 
      ... 
    } 
    free { 
      ... 
    } 
} 

    sourceSets { 
      main { 
       manifest.srcFile 'AndroidManifest.xml' 
       java.srcDirs = ['src'] 
       resources.srcDirs = ['src'] 
       aidl.srcDirs = ['src'] 
       renderscript.srcDirs = ['src'] 
       res.srcDirs = ['res'] 
       assets.srcDirs = ['assets'] 
      } 

      free { 
       java.srcDirs = ['free'] 
      } 
      paid{ 
       java.srcDirs = ['paid'] 
      } 
    } 

,然后创建源文件夹作为

+ src 
+ main // this is your common code 
    + java 
    + res 
+ free 
    + java 
    + res 
+ paid 
    + java 
    + res 

所以,当你建立与特定的风味,从特定的文件夹活动得到回升。因此,您可以将付费活动放置在付费文件夹中,并将免费活动放入免费文件夹

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,并确保它是在您的两种口味付费和免费的,你很好去。