专栏首页JarvanMo的IT专栏将旧项目迁移到AndroidStudio3.0

将旧项目迁移到AndroidStudio3.0

1.aapt2编译不过去

Error:Execution failed for task ':app:mergeDebugResources'.
> Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

原来的项目用到了kotlin以及kapt,升级到了androidstudio 3.0报了上面的错误,需要在项目的gradle.properties中添加:

android.enableAapt2=false

关闭aapt2。

2.All flavors must now belong to a named flavor dimension

All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

官方文档:

Plugin 3.0.0 includes a new dependency mechanism that automatically matches variants when consuming a library. This means an app's debug variant automatically consumes a library's debug variant, and so on. It also works when using flavors—an app's redDebug variant will consume a library's redDebug variant. To make this work, the plugin now requires that all flavors belong to a named flavor dimension —even if you intend to use only a single dimension. Otherwise, you will get the following build error:

Android Plugin3.0的依赖机制:在使用library时会自动匹配variant(debug, release),就是说app的debug会自动匹配library的debug,相信大多数人也像我一样,当library多了,不会手动选择每个Library的variant。现在好了,它会自动匹配了。同样如果使用flavor的时候,比如app的redDebug同样会自动匹配library的readDebug。虽然有这样的优势,但是在使用flavor时,必须定义flavor dimension,否则会提示错误:

Error:All flavors must now belong to a named flavor dimension.
The flavor 'flavor_name' is not assigned to a flavor dimension.

现在使用flavor,必须像下面一样配置:

// Specifies a flavor dimension.
flavorDimensions "color"

productFlavors {
     red {
      // Assigns this product flavor to the 'color' flavor dimension.
      // This step is optional if you are using only one dimension.
      dimension "color"
      ...
    }

    blue {
      dimension "color"
      ...
    }
}
  • 注意:如果library有两个dimensions:color,shape,但是app只有color,那么会如下的编译错误:
Error:Could not resolve all dependencies for configuration ':bar:redDebugCompileClasspath'.
Cannot choose between the following configurations on project :foo:
  - redCircleDebugApiElements
  - redSquareDebugApiElements
  ...
  • 在APP使用flavorSelection选定使用某个flavor dimension,注意如下配置:
android {
  ...
  // The flavorSelection property uses the following format:
  // flavorSelection 'dimension_name', 'flavor_name'

  // Chooses the 'square' flavor from libraries that specify a 'shape'
  // dimension.
  flavorSelection 'shape', 'square'
}

参考文章

3.Cannot set the value of read-only property 'outputFile’….

Android plugin 3.0 migration guide 建议:

  • 使用 all()代替 each()
  • 使用 outputFileName代替 output.outputFile,如果你只想更改文件名称
// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${variant.name}-${variant.versionName}.apk"
    }
}

参考如下:

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        def newApkName = applicationId + "-" + variant.versionName + "(" + variant.versionCode + ")" + ".apk";
        outputFileName = new File("${project.projectDir}/../outputs/apks/" + variant.name, newApkName);
    }
}

参考文章

3.You should manually set the same version via DependencyResolution

参考文章

另一种姿势:

configurations.all {  
    resolutionStrategy.force 'rubygems:rb-inotify:0.9.5'  
} 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Fluwx:微信SDK在Flutter上的实现

    随着 Flutter越来越火热,我相信越来越多的小伙伴都跃跃欲试。但是一个很重要的问题是,很多第三方

    JarvanMo
  • Fluwx:微信SDK在Flutter上的实现

    随着 Flutter越来越火热,我相信越来越多的小伙伴都跃跃欲试。但是一个很重要的问题是,很多第三方 SDK,如微信SDK,都无法在Flutter上直接使用。...

    JarvanMo
  • Linux下Node.js的安装与配置

    最近在学习Node.js,本人喜欢在linux下开发.一般来说安装Node.js有几下种方式:

    JarvanMo
  • 使用Fscrypt轻松获得文件级加密 (tech blog)

    不久以前,我就证明了对大多数用户而言,文件级加密具有足够的安全性,并且比全盘加密具有更高的性能。表达这种异质观点的努力比预期的要少得多。相对的,一些读者发送了表...

    木樾233
  • 如何使用jMeter测试SAP OData服务并发访问时的性能

    For project reason I have to measure the performance of OData service being acce...

    Jerry Wang
  • 使用事件调制Gillespie算法的随机地理空间流行病模型和仿真(CS SI)

    我们开发了用于随机模拟COVID-19和其他类似传染病传播的模型和工具,同时考虑了接触网络的结构和人口密度的地理分布,详细说明了个人所在的位置。我们的分析框架包...

    毛艺漩8078803
  • 用强化学习从视频中学习生成动作动画

    原文blog:https://bair.berkeley.edu/blog/2018/10/09/sfv/

    xcigar
  • 电子商务在化妆品行业中表现出色

    传统上,化妆品公司依靠当面零售来吸引新客户并维持现有客户群。然而,这种流行病已经颠覆了化妆品行业,给敏捷和有创造力的公司带来了新的挑战和机遇。

    用户8078865
  • (翻译)开始使用ABP.CORE模板 (ASP.NET Core with Angular)

    开始一个新使用Angular和 ASP.NET Core 的ABP项目最简单的方法就是通过官方的模板页面来生成模板。切记包含zero模块。在官网完成创建和下载你...

    易兒善
  • 推券客问题解决笔记

    解决办法:调整服务器时间(WDCP同步时间:/www/wdlinux/wdcp/shell/wdcpntp.sh)

    用户1191760

扫码关注云+社区

领取腾讯云代金券