我不知道如何在resValue
中设置资源值(build.gradle
),取决于构建变体的选择。
这里有一些解释。
我正在使用 Skype for Business SDK (以下称为 Sfb ),在实施期间,它要求我添加一个名为{{ 1}}。
因此,我在查看他们的应用程序示例(available here)时发现,在ENTERPRISE_AUTHENTICATOR_ACCOUNT_TYPE
中,它们按照以下相应值添加了:
build.gradle
然后在SfbSDK类中使用此值,检查它是否与应用程序包名称匹配。
这是我的麻烦,我使用下面的android {
...
defaultConfig {
applicationId "com.microsoft.office.sfb.sfbdemo"
...
resValue ("string", "ENTERPRISE_AUTHENTICATOR_ACCOUNT_TYPE", "${applicationId}"
}
...
}
中所述的不同flavorDimensions
。
build.gradle
根据我的 build变体选择,这将为我生成6个不同的APK:
因此,当进行匹配检查时,我的应用程序因消息错误而崩溃
apply plugin: 'com.android.application'
...
android {
...
defaultConfig {
applicationId "com.tsp.test"
...
resValue ("string", "ENTERPRISE_AUTHENTICATOR_ACCOUNT_TYPE", "${applicationId}"
}
...
flavorDimensions("customer", "version")
productFlavors {
a {
dimension "customer"
applicationIdSuffix ".a"
}
b {
dimension "customer"
applicationIdSuffix ".b"
}
alpha {
dimension "version"
applicationIdSuffix ".alpha"
}
beta {
dimension "version"
applicationIdSuffix ".beta"
}
release {
dimension "version"
applicationIdSuffix ".release"
}
}
}
...
当然,因为Caused by: java.lang.RuntimeException: ENTERPRISE_AUTHENTICATOR_ACCOUNT_TYPE string not set to applicationId
at com.microsoft.office.sfb.appsdk.Application.initialize(Application.java:110)
at com.microsoft.office.sfb.appsdk.Application.getInstance(Application.java:144)
at com.tsp.test.RootActivity.onCreate(RootActivity.java:89)
与com.tsp.test
(或任何其他APK)不匹配。
如何根据所选的 build变体与正确的应用程序包名称相匹配来实现动态com.tsp.test.a.alpha
?
编辑:
多解释一点。首先,我选择Build Variants,如下所示:
然后,在我的resValue
(启动器活动)中,根据 SfbSDK ,我开始使用应用程序实例配置 SfbSDK :
RootActivity#onCreate()
在this.mApplication = com.microsoft.office.sfb.appsdk.Application.getInstance(this.getApplication().getApplicationContext());
方法中的某个地方, SfbSDK 在getInstance()
和equals()
context.getPackageName()
因此,为了调试,在我的context.getString(string.ENTERPRISE_AUTHENTICATOR_ACCOUNT_TYPE);
中,我只写了这两行
RootActivity#onCreate()
这不匹配!因此,在SfbSDK中,条件没有通过。
答案 0 :(得分:2)
好,感谢Radesh和他提供给我的this link,我找到了解决方案。
我从resValue
块中删除了defaultConfig
,然后在android
插件任务中添加了一个新块,为每个块创建了resValue
变体。
apply plugin: 'com.android.application'
...
android {
...
defaultConfig {
applicationId "com.tsp.test"
...
}
...
flavorDimensions("customer", "version")
productFlavors {
a {
dimension "customer"
applicationIdSuffix ".a"
}
b {
dimension "customer"
applicationIdSuffix ".b"
}
alpha {
dimension "version"
applicationIdSuffix ".alpha"
}
beta {
dimension "version"
applicationIdSuffix ".beta"
}
release {
dimension "version"
applicationIdSuffix ".release"
}
}
...
applicationVariants.all { variant ->
variant.resValue "string", "ENTERPRISE_AUTHENTICATOR_ACCOUNT_TYPE", "\"${applicationId}\""
}
}
...
这会正确生成带有所选变体的包名称的resValue
。
对于变体客户 A 和版本 Alpha ,我得到resValue = com.tsp.test.a.alpha
。
答案 1 :(得分:1)
您必须在gradle.properties中清除变量ENTERPRISE_AUTHENTICATOR_ACCOUNT_TYPE,如下所示:
//default
org.gradle.jvmargs=-Xmx1536m
ENTERPRISE_AUTHENTICATOR_ACCOUNT_TYPE=xxx