声明变量到build.gradle中,以使applicationId与后缀相匹配

时间:2018-06-26 09:56:46

标签: android gradle skype-for-business skypedeveloper

我不知道如何在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:

  • com.tsp.test.a.alpha ; com.tsp.test.a.beta ; com.tsp.test.a.release
  • com.tsp.test.b.alpha ; com.tsp.test.b.beta ; com.tsp.test.b.release

因此,当进行匹配检查时,我的应用程序因消息错误而崩溃

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,如下所示:

  • 客户: A
  • 版本: Alpha

然后,在我的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中,条件没有通过。

2 个答案:

答案 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