Android Gradle从strings.xml中读取应用程序名称

我正在尝试为每个构建变体重命名我的APK文件,以包含应用程序名称,versionName,versionCode和内部版本号.到目前为止,除了应用程序名称之外,我的所有工

我想使用AndroidManifest.xml文件用于android:label的相同值.这来自字符串资源@ string / app_name.我已经看到了使用以下方法替换资源值的能力:

resValue "string","app_name","Some new value"

但我只想读取此值并使用它来命名我的APK文件.

android.applicationVariants.all { variant ->
    variant.outputs.each { output ->
        renameApk(variant,output)
    }
}

def renameApk(variant,output) {
    def apkPath = output.outputFile.parent
    def baseName = project.archivesBaseName

    baseName += "-${variant.buildType.name}"

    // add version name and version code
    baseName += "-v${variant.mergedFlavor.versionName}-${variant.mergedFlavor.versionCode}"

    // if built on jenkins ci,add jenkins build number:
    def buildNumber = System.getenv('BUILD_NUMBER')
    if (buildNumber && buildNumber.size() > 0) {
        baseName += "-b${buildNumber}"
    }

    // if the variant will not be zipAligned,specify that
    if (!output.zipAlign) {
        baseName += '-unaligned'
    }

    // set the output file
    output.outputFile = new File(apkPath,"${baseName}.apk");
}

解决方法

我认为这不容易做到.资源分辨率在移动设备上完成,以适应屏幕方向,本地化等内容.例如,Gradle构建系统无法知道要使用的语言环境.如果您坚持从资源中获取值,则可以打开要使用的特定strings.xml文件,解析XML并自行获取值.在我看来,这是一个巨大的矫枉过正,会非常缓慢和丑陋.

应用程序名称不会经常更改,因此我很乐意对其进行硬编码(特别是因为最终用户看不到apk文件名,所以即使出现错误,影响也会很小).如果您正在处理白标应用程序并且必须支持动态应用程序名称,则将值提取到gradle.properties文件(或您正在使用的某些其他类型的配置文件)应该是更好的选择,而不是使用应用程序的资源.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...