Android Studio 3.0 问题记录

1.更新后Gradle Plugin 3.0 遇到的问题

问题

Error:(101, 0) Cannot set the value of read-only property 'outputFile' for A ...

解决

升级为 gradle plugin 3.0 后,打包的文件输出就出了问题:

原始为:

         //配置apk路径
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            if (variant.buildType.name == 'release') {
                variant.mergedFlavor.versionCode = getVersionCode(false)
                variant.mergedFlavor.versionName = getVersionName(false)
                // release
                def apkName = "${project.getName()}_${variant.flavorName}_${buildType.name}_v${variant.versionCode}.apk"
                       output.outputFile = new File(output.outputFile.parent, apkName)
            } else {
                variant.mergedFlavor.versionCode = getVersionCode(true)
                variant.mergedFlavor.versionName = getVersionName(true)
                // debug
               def apkName = "${project.getName()}_${buildType.name}.apk"
                      output.outputFile = new File(output.outputFile.parent, apkName)
            }
        }
    }

更新为:要输出的文件名称必须命名为 outputFileName

         //配置apk路径
            applicationVariants.all {
                variant ->
                    def buildType = variant.buildType.name
                    if(buildType=='release'){
                        // variant.getPackageApplication().outputDirectory = new File(rootProject.rootDir,"releaseApk")
                        variant.getPackageApplication().outputDirectory = new File("F:/apk/frameDemoApk","releaseApk")
                    }else {
                        //debug版本
                        variant.getPackageApplication().outputDirectory = new File("F:/apk/frameDemoApk","debugApk")
                    }

                    variant.outputs.each { output ->
                        def outputFile = output.outputFile
                        if (outputFile != null && outputFile.name.endsWith('.apk')) {
                            // 输出apk名称为XXX20160328_v1.0.0_vc10_XXXX_test.apk
                                def fileName = "frame_${releaseTime()}_v${rootProject.ext.android.versionName}.apk"
                            //  output.outputFile 改为 outputFileName
                                output.apkData.outputFileName = fileName
                             
                        }
                    }
            }

打包签名apk出错问题:


image.png

解决:
方法1:
点击Android Studio侧边栏的Gradle按钮,刷新下Gradle的配置.


image.png

方法2:
如果是编译好了APK名称冲突,可以先屏蔽 build配置的打包文件输出.如上配置的apk输出路径.

方法3:
Android Studio 3.0会在debug apk的manifest文件application标签里自动添加 android:testOnly="true"属性,导致apk手机上甚至安装不了.
解决方法:
在gradle.properties(项目根目录或者gradle全局配置目录 ~/.gradle/)文件中添加android.injected.testOnly=false

gradle中用的一些路径环境变量

新建一个工程名为InspectGradleDir,路径为 
D:\study\android\projects\InspectGradleDir

那么rootDir对应 
D:\study\android\projects\InspectGradleDir

projectDir对应 
D:\study\android\projects\InspectGradleDir\app

buildDir对应 
D:\study\android\projects\InspectGradleDir\app\build

2. 出现 AAPT2 错误

Error:(1875) resource color/blue (aka com.smartahc.android.insurance.beta:color/blue) not found.
Error:(1880) resource color/white (aka com.smartahc.android.insurance.beta:color/white) not found.
Error:(1882) resource color/white (aka com.smartahc.android.insurance.beta:color/white) not found.
Error:(1885) resource color/white (aka com.smartahc.android.insurance.beta:color/white) not found.
Error:failed linking references.
Error:java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Execution failed for task ':eartag_main:processBetaReleaseResources'.
> Failed to execute aapt

解决

gradle.properties 中添加下面内容

#Tue Oct 17 10:08:09 CST 2017
android.enableAapt2=false

3. flavor dimension 配置问题

Error:A problem occurred configuring project ':eartag_main'.
> All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

解决

android{
  ...
  defaultconfig{
     ...
     ...
     flavorDimensions "tier"
  }
  ...

    productFlavors {
        beta {
            dimension "tier"
            ...
            ]
        }
        production {
            dimension "tier"
             ....
            ]
        }
    }

}

4. Unable to resolve dependency for compileClasspath

类似于下面错误


Unable to resolve dependency for ':eartag_main@betaProductionPyger/compileClasspath': Could not resolve project :eartag_base. Open File Show Details

解决

library 库依赖的时候,需要注意 build variant 使用方式:

image.png
  • 当 library 为 debug 的时候,使用 debugImplementation 引入;
  • 当 library 为 release 的时候,使用 implementation 引入;

5.依赖改变

  • implementation : 依赖 libs 和 第三方库
  • debugImplementation : 依赖 debug 版本
  • testImplementation : 依赖测试库
  • androidTestImplementation : 依赖 andrioid 测试库
  • api : 以前的 complie 用法;
    implementation project(':eartag_base')
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

重点

看看 api 与 implementation 的使用对比,不然在项目中依赖 module 后,怎么都找不到 libs 中依赖的内容:

image.png

最后保持 build variants 一直就行了

image.png

5.kotlin 配置

项目使用 databinding 了,然后更新后就不能用了,使用 kapt 进行引入 databinding

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
...

dependencies {
    // kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation libs.pyger
    kapt libs.databinding
    //    implementation smartahc.coreui
    implementation project(':eartag_base')
}

6.aapt 依赖库重复问题


Error:org.gradle.process.internal.ExecException: Process 'command '/Users/yuan/Library/Android/sdk/build-tools/26.0.2/aapt'' finished with non-zero exit value 1

如果自己配置 android 相关的库,就会出现重复依赖的情况,看这个是否重复依赖了相关库,如果自己使用第三方的已经配置了,那么久不需要自己进行配置了,或者自己配置成相同的版本;

image.png

7.更多配置设置见官网说明

gradle-plugin-3.0 migration

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容