适用Unity的AndroidStudio项目自动修改打包文件名称的方案

叨叨

主播身为一个垃圾代码开发,总想搞自动化,有时候需要在unity里打包出apk,有时需要在unity打包出as工程后再打包出apk,这就遇到一个问题,unity的打包apk还好,会自动修改名字,可是在as里打包就不会自动修改名字了,为了解决这个问题,主播做了多个尝试。初步定下的方案是从strings.xml文件里自动取得产品名称,这是没问题的。然后再launcher的build.gradle里设置在打包的时候使用这个名称。如何设置成了一个问题。想看最终方案的直接划到最下面。

先把取得产品名称的方法贴出来,这个放到build.gradle(launcher)顶层就行

复制代码
    def getStringXmlName() {
        def xmlFile = file("${projectDir}/src/main/res/values/strings.xml")
        def xml = new XmlSlurper().parse(xmlFile)
        return xml.string.find { it.@name == 'app_name' }.text()
    }

最初主播是这样的,直接简单粗暴地加这个

复制代码
在build.gradle(launcher)的android->defaultConfig下面加上这个
        setProperty("archivesBaseName", "${getStringXmlName()}-v${versionName}")

很好,这是成功的,打包出来的apk和aab的名称都变化了,于是我将修改应用到了unity的GradleTemplates里面。结果在unity的某次打包apk时出错,这个错误是在说什么unity没找到apk。

这是因为unity打包的时候,是先在某个地方把apk打出来,再进行文件移动到你打包前进行的位置设置,再修改名称,而主播修改了模板后,unity就找不到这个默认名称的文件里,所以主播需要修改这个方法,要让这个build.gradle自己识别自己这个项目是正在被unity打包还是as打包,于是主播在GPT助理的帮助下发现了这个。

复制代码
// Android Studio 构建会自动设置这个属性
project.hasProperty("android.injected.invoked.from.ide")

顾名思义,这个可以识别是不是被as打包,还是被unity直接调用gradle打包。

最终方案

复制代码
//放到build.gradle(launcher)的顶层,和android,dependencies这些同级
def getStringXmlName() {
    def xmlFile = file("${projectDir}/src/main/res/values/strings.xml")
    def xml = new XmlSlurper().parse(xmlFile)
    return xml.string.find { it.@name == 'app_name' }.text()
}
//放到build.gradle(launcher)->android下面
  applicationVariants.all { variant ->
            variant.outputs.all { output ->

                def versionName = variant.versionName
                def projectName = getStringXmlName()

                // Android Studio 构建会自动设置这个属性
                def isFromAndroidStudio = project.hasProperty("android.injected.invoked.from.ide")

                if (isFromAndroidStudio) {
                    // 只有在 Android Studio 内部构建时才重命名
                    setProperty("archivesBaseName", "${projectName}-v${versionName}")
                    println "===> AS 构建,修改输出文件名: ${projectName}-v${versionName}"
                } else {
                    // Unity 直接打包 apk 时不要动文件名
                    println "===> Unity 构建 APK,保持默认名称(launcher-release.apk)"
                }
            }
        }

如图

相关推荐
k4m7v2pz13 小时前
Godot 4 窗口拉伸黑边与变形:stretch 配置全解析
数码相机·游戏引擎·godot·2d游戏·黑边·stretch·画面比例
UWA1 天前
GPM 2.0 WebGL 监测能力扩容|覆盖 Unity/Cocos/LayaAir 多引擎微信 & 抖音小游戏
unity·微信·性能优化·小游戏·webgl
Behaviour1 天前
Unity 手游网络同步技术
网络·unity·c#·游戏引擎
niuniudengdeng1 天前
Unity手游APK去广告实战:华为渠道包反编译、广告拦截与“网络不佳“弹窗修复全记录
unity·游戏引擎
k4m7v2pz1 天前
Godot 4 嵌入式试玩窗口尺寸与适配策略详解
编辑器·游戏引擎·godot·游戏开发·嵌入式运行
Behaviour2 天前
Unity UI循环列表UIScrollViewContent实现
ui·unity·c#·游戏引擎
_ZHOURUI_H_2 天前
Unity EasyECS:并不是所有字段都适合 SoA,Unity 项目中应该怎样拆数据
游戏·unity·性能优化·架构·游戏引擎
TO_ZRG2 天前
Unity 编辑器之 SettingsProvider、Hierarchy、Project、SearchField
java·unity·编辑器
yj爆裂鼓手2 天前
spine绑定骨骼运动工具&spine纹理压缩自动设置工具
游戏·unity
惊鸿醉3 天前
Unity 实战:用讯飞 WebAPI 做一个“说普通话、播方言“的语音程序
unity·c#·游戏引擎·语音识别