我的项目有两种:
flavor1 -> packagename: com.example.flavor1
flavor2 -> packagename: com.example.flavor2
Run Code Online (Sandbox Code Playgroud)
现在我想构建一个flavor1和flavor2的构造变量.buildvariant的唯一区别是另一个packagename.
我的项目使用MapFragments并且只有一个Manifest - 所以我将MAPS_RECEIVE的权限名称放在我各自风格的字符串资源文件中.
问题是:如何替换buildvariant的字符串资源?
我尝试了以下方法(在这篇文章中描述):
buildTypes{
flavor1Rev{
packageName 'com.example.rev.flavor1'
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: ['package_permission' : 'com.example.rev.flavor1.permission.MAPS_RECEIVE'])
}
}
Run Code Online (Sandbox Code Playgroud)
但是使用这个我得到了这个错误:
找不到参数[{tokens = {package_permission = com.example.rev.flavor1.permission.MAPS_RECEIVE}}的方法filter(),BuildTypeDsl_D ecorated {name = ReplaceTokens,debuggable = false,jniDebugBuild = false,renderscript DebugBuild = false, BuildTypeD上的renderscriptOptimLevel = 3,packageNameSuffix = null,versionNameS uffix = null,runProguard = false,zipAlign = true,signingConfig = null}] sl_Decorated {name = buderusFinal,debuggable = false,jniDebugBuild = false,renderscr iptDebugBuild = false,renderscriptOptimLevel = 3 ,packageNameSuffix = null,versionNa meSuffix = null,runProguard = false,zipAlign …
我目前正在实现此处建议的API密钥切换脚本,除了使用构建类型而不是flavor.我的build.gradle看起来像这样:
...
buildTypes {
debug {
...
set("crashlyticsApiKey", "API_KEY_1")
set("crashlyticsApiSecret", "API_SECRET_1")
}
release {
...
set("crashlyticsApiKey", "API_KEY_2")
set("crashlyticsApiSecret", "API_SECRET_2")
}
}
...
productFlavors{...}
...
File crashlyticsProperties = new File("${project.projectDir.absolutePath}/crashlytics.properties")
applicationVariants.all { variant ->
variant.productFlavors.each { flavor ->
def variantSuffix = variant.name.capitalize()
def generateResourcesTask = project.tasks.getByName("crashlyticsGenerateResources${variantSuffix}")
def generatePropertiesTask = task("crashlyticsGenerateProperties${variantSuffix}") << {
Properties properties = new Properties()
println "...copying apiKey for ${variant.name}"
properties.put("apiKey", variant.buildType.crashlyticsApiKey)
println "...copying apiSecret for ${variant.name}"
properties.put("apiSecret", variant.buildType.crashlyticsApiSecret)
properties.store(new FileWriter(crashlyticsProperties), "")
}
generateResourcesTask.dependsOn generatePropertiesTask
def cleanResourcesTask …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用具有2种不同风格的Android Studio设置Android应用.每种风味都会更改packageName和applicationId - 因为我想将2个独立的APK作为2个不同的产品提交给Google Play.
我还尝试在Crashlytics中设置单独的应用程序,每种风格都有一个.虽然第一个创建没有任何问题,但当我切换味道时,Android Studio的Crashlytics插件仍然认为我的项目已经设置好了.因此,目前我无法正确设置我的Crashlytics以获得第二种口味.
在此先感谢您的任何建议.
android gradle crashlytics android-studio android-gradle-plugin
我有多个flavors并试图分别使用Beta Distribution以下方式分发它们:
productFlavors {
appOne{
applicationId 'com.example.appOne'
manifestPlaceholders = [ appName: "AppOne", fabricApiKey: "AppOne APi Key"]
}
appTwo{
applicationId 'com.example.appTwo'
manifestPlaceholders = [ appName: "AppTwo", fabricApiKey: "AppTwo APi Key"]
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest:
<meta-data
android:name="io.fabric.ApiKey"
android:value="${fabricApiKey}" />
Run Code Online (Sandbox Code Playgroud)
我创建了两个不同的组织,基于flavor它们构建应用程序,并将它们成功添加到组织中.但是,appOne flavour当工作正常时,分发图标被隐藏appTwo flavor(如下所示):
我也尝试了旧的方式(生成fabric.properties时build)没有任何成功:链接1和链接2.
有没有办法可以基于分发多个应用程序flavor?