【问题标题】:Android flavors with different applicationId broke application behavior and look具有不同 applicationId 的 Android 风格破坏了应用程序的行为和外观
【发布时间】:2016-10-28 12:32:02
【问题描述】:

我正在关注build.gradle

apply plugin: 'com.android.application'

def final appId = "com.example.app"

android {
    compileSdkVersion 23
    buildToolsVersion '24.0.1'

    defaultConfig {
        vectorDrawables.useSupportLibrary = true
        applicationId appId
        buildConfigField "String", "DBNAME", "\"mydb.db\""
    }

    testOptions {
        unitTests.returnDefaultValues = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFile 'proguard-rules.pro'
        }
    }
    productFlavors {
        rel {
            minSdkVersion 14
            applicationId = "${appId}"
            buildConfigField "String", "DBNAME", "\"mydb.db\""
            targetSdkVersion 23
            versionCode 33
            versionName '1.4'
        }
        dev {
            minSdkVersion 14
            applicationId =  "${appId}.dev"
            buildConfigField "String", "DBNAME", "\"mydb_dev.db\""
            targetSdkVersion 3
            versionCode 1
            versionName '1.4-beta'

        }
    }
}

...

我没有将代码从main 复制到reldev 源集,我刚刚为每种风格创建了单独的文件:res/values/strings.xml、res/values/colors.xml、 google-service.json。

应用程序构建良好,使用不同的applicationId 并在同一设备上单独安装。

对于rel 风格,一切正常,它的applicationId = 'com.example.app' 等于原始包名称和实际源包名称。

但是我获得了非常奇怪的行为并寻找dev 风格,它变成了applicationId = 'com.example.app.dev'

首先,我看到动画无法正常工作,因为它们似乎变成了错误的坐标。

其次,我有许多带有动态膨胀视图的片段,它们部分显示或根本不显示 - 在不同的运行中有所不同。

我认为问题在于我的类具有相同的包名称,并且可能出现了如此模棱两可的类标识。

我看到 getContext() 为两种风格返回相同的类“com.example.app.MainActivity”,我认为这很重要。

我不想复制每个源集下的所有源,因为我不需要在那里进行更改 - 代码仍然相同。

什么是解决方案?

【问题讨论】:

  • 所以你为每种风格创建了带有 res 子文件夹的单独文件夹?您是否将文件夹定义为 build.gradle 中某处的源集?另外:您是否阅读并理解布局文件是如何合并的?见tools.android.com/tech-docs/new-build-system/resource-merging
  • 我在build.gradle 中进行了更改,然后运行了gradle task android:sourceSets,并创建了与build.gradle 中声明的文件夹对应的文件夹,并将具有不同资源定义的文件放在这里。我看到每种风格的构建都正确地占用了资源:字符串、颜色和谷歌服务分别不同并且可以工作。但是出现了行为和视图的问题。
  • 是的,我读过关于资源合并的文章

标签: android android-flavors


【解决方案1】:

这是一个错误的输入,需要花费很多时间来解决......

我指的是targetSdkVersion 3 而不是targetSdkVersion 23

(我很惊讶它正在建造)

问题解决了,Android Flavours太棒了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2016-12-20
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多