欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

升级AndroidStudio 3.5.1 之后的问题

程序员文章站 2022-06-09 13:28:53
...

AndroidStudio 3.5.1 编译几个小问题

升级问题配置参数导致的几个小问题

dependencies {
    classpath 'com.android.tools.build:gradle:3.5.1'
}

gradle-warpper.properties 文件配置

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

项目的sdk 版本配置就算了, 直接说运行碰上的两个问题

API ‘variant.getPackageApplication()’ is obsolete and has been replaced with ‘variant.getPackageApplicationProvider()’.
这个网上查了一下 ,

Android Studio 更新至gradle 4.10.1后Variants API变化
同步警告:

WARNING: API ‘variantOutput.getPackageApplication()’ is obsolete and has been replaced with ‘variant.getPackageApplicationProvider()’.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variantOutput.getPackageApplication(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace.
Affected Modules: app

官方网站说明:

升级AndroidStudio 3.5.1 之后的问题

粗略翻译为:避免初始化和配置完成当前构建所不需要的任务,例如,如果您有多个构建变体,例如“发布”和“调试”构建变体,并且您正在构建应用程序的“调试”版本,则该插件可避免初始化和配置“发布”版本的任务你的应用。

例如以下是根据版本和时间配置自定义apk名称方法,更新后需要将 defaultConfig.xxx 修改为 variant.xxx :

这个地方我的项目中配置主要是用来 指定生成文件的目录和文件的名称 获取到app 的versionName和VersionCode 为此 修改,


//// 这是原来配置 
  
def generateApk(variant) {
    if (variant.buildType.name == "release") {
        variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/release")
        variant.getPackageApplication().outputScope.apkDatas.forEach { apkData ->
            apkData.outputFileName = "gc_part_" + android.defaultConfig.versionName + ".apk"
        }
    }
}

    

修改完了以后的配置 包含了打包的文件名称 :

    //自定义apk名称含版本号信息
    applicationVariants.all {variant ->
        variant.outputs.all {
            outputFileName = "gc_part_${variant.versionCode}-${variant.versionName}-${releaseTime()}.apk"
        }
    }

然后运行, 又出了个问题,

日志如下:

Cause: buildOutput.apkData must not be null

国内网上搜到的解决方式都是,

点击 Build 然后点击 Clean Project 重新运行即可

然鹅对于我来说还是没用 ,无奈Google了一番, 找到了 ,

deleting debug/output.json and release/output.json solved my problem

删了之后,果然可以了。

再记一笔,
貌似 3.5.0 版本 有个问题 就是同时打开多个项目会导致一个文件共用数超过最大数,两个项目会同时进入indexing和Build project structure 的死锁, 不停的这样折腾,然后Mac 哗哗的响, 这个问题我没有管他,要么不管,要么build 不成功 也先不用管。

过了几天 AS 提醒我 升级3.5.1 了 ,升级之后这个问题就不存在了。

就到这儿,有问题我们共同讨论学习进步。