android studio 历史项目,将旧项目迁移到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

官方文档:

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’….

使用 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值