OS-->Gradle3.0 修改APK生成路径和文件名

就在昨天AS3.0正式发布了. 下载地址

同样的, Gradle 插件也更新到了3.0, 但是当我们更新到3.0的时候, 很多dsl 无法使用了, 其中就有一个本人比较喜欢的api改变了, 就是修改打包生成的APK文件名.

在未更新之前:

  getApplicationVariants().all { variant ->
      variant.outputs.each { output ->
          def fileName = "AppName-${defaultConfig.versionName}_" +
                  "${releaseTime()}_" +
                  "${variant.productFlavors[0].name}_" +
                  "${variant.buildType.name}_" +
                  "${if (variant.signingConfig == null) "unsigned" else variant.signingConfig.name}.apk"
          //可以通过这个方法修改输出文件名        
          output.outputFile = new File(output.outputFile.parent, fileName)
      }
  }

更新3.0之后, 上面的方法就会报错.

3.0可以使用以下方法修改:

applicationVariants.all { variant ->
    //这个修改输出的APK路径
 if (variant.buildType.name != "debug") {//防止AS无法安装debug包(apk)
    variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apk")
 }
    variant.getPackageApplication().outputScope.apkDatas.forEach { apkData ->
        //这个修改输出APK的文件名
        apkData.outputFileName = "AppName-" +
                variant.versionName + "_" +
                apk_time + "_" +
                variant.flavorName + "_" +
                variant.buildType.name + "_" +
                variant.signingConfig.name +
                ".apk"
    }
}

具体的API更改说明可以查看:
https://developer.android.google.cn/studio/build/gradle-plugin-3-0-0-migration.html#variant_api
据说是为了加快编译速度.


同时
更新到Gradle 3.0之后,如果你有 productFlavors, 那么必须定义 flavorDimensions, 其次生成的apk name会根据productFlavors.name命名.

android{
    ...
    flavorDimensions "type" //这个是必须的
    ...
    productFlavors{
        dev{
            dimension "type"  //并且必须使用这个dimension
        }
        pre{
            dimension "type" //并且必须使用这个dimension
        }
        apk{
            dimension "type" //并且必须使用这个dimension
        }
    }
}

apk名如下:
dev-debug.apk
dev-release.apk
pre-debug.apk
pre-release.apk
apk-debug.apk
apk-release.apk

如果你声明了多个 productFlavors, 那么每个都要使用, 否则会编译不过.

android{
    ...
    flavorDimensions "type", "type2"
    ...
    productFlavors{
        dev{
            dimension "type" 
        }
        pre{
            dimension "type" 
        }
        apk{
            dimension "type2" //type2 也必须使用
        }
    }
}

这样生成的apk名字就会是 (type 对应的 productFlavors.name )+ (type2 对应的 productFlavors.name) .
上面的就会是:
devApk-debug.apk
devApk-release.apk
preApk-debug.apk
preApk-release.apk
这样就可以通过productFlavors.name达到修改APK的文件名.


联系作者

点此快速加群

请使用QQ扫码加群, 小伙伴们在等着你哦!

关注我的公众号, 每天都能一起玩耍哦!

猜你喜欢

转载自blog.csdn.net/angcyo/article/details/78357512