Android Flavor Intent Activity

时间:2016-11-29 05:44:05

标签: android android-intent android-activity android-productflavors

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

层次:

main
-ActivityA

flavor(free)
-uses main/ActivityA

flavor(paid)
-uses own paid/ActivityA

那么如何根据当前的味道创建一个Intent?

3 个答案:

答案 0 :(得分:3)

您可以通过它的名称获取Activity类。这样就不会出现编译错误:

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

答案 1 :(得分:0)

你可以用口味做很多事情,但你想做的事情比任何人都要简单得多。

首先,您有一个构建变体来选择调试和运行的风格。所以请使用它,否则所有调试都将使用默认主版本。

其次,您不必获取包名称,只需使用构建配置标志或检查风味。即。

    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。你在做什么有点hacky,但我想它的确有效。但是,会建议让味道工具完成它的工作并为你启动它。

只需从Main中删除MainActivity,并确保它有两种版本付费且免费,您就可以了。

答案 2 :(得分:-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

因此,当您使用特定的风格进行构建时,将选择特定文件夹中的“活动”。因此,您可以将付费活动放在付费文件夹中,并将免费活动放在免费文件夹中。