Android 风味意图 Activity
Android Flavor Intent Activity
如何根据口味创建 activity 的意图?
层次结构:
main
-ActivityA
flavor(free)
-uses main/ActivityA
flavor(paid)
-uses own paid/ActivityA
那么如何根据当前flavor创建一个Intent呢?
创建构建风格为
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
因此,当您使用特定风格构建时,会选择特定文件夹中的 Activity。因此,您可以将付费 Activity 放在付费文件夹中,将免费 Activity 放在免费文件夹中。
你可以通过它的名字得到Activity class。这样你就不会得到编译错误:
Intent i = new Intent(this, Class.forName("com.xxx.packagename.paid.ActivityA"))
你可以用 flavors 做很多事情,但你想做的事情比任何人回答的要简单得多。
首先你有一个构建变体 select 你的调试风格和 运行。所以使用这个,否则你所有的调试都将使用默认的主版本。
其次,您不必获取包名称,只需使用构建配置标志或检查风格即可。即
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 下拉列表中的任何内容,这是不正确的,您可以忽略它总是正确的或者总是错误的警告,我向你保证它有效。
最后,您的包是由您正在调试的构建变体驱动的,我将添加一个图像,以便您可以看到要更改的位置。
希望对您有所帮助。
但我最后要说的是,您的 MainActivity 将自动处理,您无需管理 MainActivity 的包,只需启动它即可。它将为您所在的版本使用各自的风格。通常,当您将文件移动到一个风格时,您会制作您的发布风格和您的变体,以便它将使用各自的 MainActivity。你在做什么是有点hacky,但我想它的工作原理。但是,建议让风味工具完成它的工作并为您启动它。
只需从 Main 中删除 MainActivity 并确保它在您的付费和免费两种版本中,您就可以开始了。
如何根据口味创建 activity 的意图?
层次结构:
main
-ActivityA
flavor(free)
-uses main/ActivityA
flavor(paid)
-uses own paid/ActivityA
那么如何根据当前flavor创建一个Intent呢?
创建构建风格为
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
因此,当您使用特定风格构建时,会选择特定文件夹中的 Activity。因此,您可以将付费 Activity 放在付费文件夹中,将免费 Activity 放在免费文件夹中。
你可以通过它的名字得到Activity class。这样你就不会得到编译错误:
Intent i = new Intent(this, Class.forName("com.xxx.packagename.paid.ActivityA"))
你可以用 flavors 做很多事情,但你想做的事情比任何人回答的要简单得多。
首先你有一个构建变体 select 你的调试风格和 运行。所以使用这个,否则你所有的调试都将使用默认的主版本。
其次,您不必获取包名称,只需使用构建配置标志或检查风格即可。即
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 下拉列表中的任何内容,这是不正确的,您可以忽略它总是正确的或者总是错误的警告,我向你保证它有效。
最后,您的包是由您正在调试的构建变体驱动的,我将添加一个图像,以便您可以看到要更改的位置。
希望对您有所帮助。
但我最后要说的是,您的 MainActivity 将自动处理,您无需管理 MainActivity 的包,只需启动它即可。它将为您所在的版本使用各自的风格。通常,当您将文件移动到一个风格时,您会制作您的发布风格和您的变体,以便它将使用各自的 MainActivity。你在做什么是有点hacky,但我想它的工作原理。但是,建议让风味工具完成它的工作并为您启动它。
只需从 Main 中删除 MainActivity 并确保它在您的付费和免费两种版本中,您就可以开始了。