我试图重命名每个构建变量的APK文件,以包括应用程序名称、版本名、版本代码和构建编号(如果存在)。到目前为止,除了应用程序名之外,我的一切都正常工作。
我想使用与< code>AndroidManifest.xml文件用于android:label相同的值。这来自字符串资源< code>@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");
}
我必须使用@Yaroslav的答案创建一个方法(https://stackoverflow.com/a/37432654/6711554).
def getApplicationName() {
try {
def stringsFile = file("./src/main/res/values/string.xml")
return new XmlParser().parse(stringsFile).string.find { it.@name.equals 'your_app_name' }.text()
}catch(e){
println(e)
return "Default App Name"
}
}
您可以从任何资源文件中读取gradle中的任何字符串。
我认为这不容易做到。资源解析是在移动设备上完成的,以适应屏幕方向、本地化等情况。例如,Gradle构建系统无法知道使用哪个语言环境。如果您坚持从资源中获取值,您可以打开您想使用的特定strings.xml文件,解析XML并自己获取值。在我看来,这是一个巨大的矫枉过正,而且会非常缓慢和丑陋。
应用程序名称不会经常更改,因此我可以将其硬编码(特别是因为apk文件名对最终用户不可见,因此即使发生错误,影响也很小)。如果您正在使用白标签应用程序,并且必须支持动态应用程序名称,则将值提取到gradle。属性文件(或您正在使用的其他类型的配置文件)应该是更好的选择,而不是使用应用程序的资源。
我在Android插件文档中没有看到任何访问资源的方法,因此以下是您可以通过搜索资源来查找应用名称的代码:
def getAppName() {
def stringsFile = android.sourceSets.main.res.sourceFiles.find { it.name.equals 'strings.xml' }
return new XmlParser().parse(stringsFile).string.find { it.@name.equals 'app_name' }.text()
}
但我完全同意@Samuil Yanovski的观点,那就是不值得——最好硬编码一个字符串。我不认为它会减慢建设进程,但它只是不必要的。
问题内容: 有什么办法可以从中读取文件? 我对库或类/代码文件仅在中定义的字符串不感兴趣 问题答案: 是的,您可以使用以下命令提取所有资源文件 脚步 - 要么
我想知道一个应用程序的包名,我只知道那个应用程序的应用程序名。假设我想知道一个电子邮件应用程序的包名,只是它的名字,然后如何得到它 我只知道应用程序名。 这是代码,以获得所有的应用程序的包名称,但我需要知道特定的应用程序。
我有一个Jenkins的工作,在那里我执行了一个Groovy脚本。从那个Groovy脚本中,我向另一个应用程序发出POST请求。我的Jenkins服务器和应用程序在不同的机器上。我需要从应用程序的代码中访问Jenkins环境变量。这可能吗? 我尝试使用System.getenv("ENVIRONMUT-VARIABLE-NAME")方法检索环境变量,但返回的结果为null。
我一直在尝试开发一个android应用程序,可以从CIFS/SMB协议中提取信息。我尝试过JCIFS,但由于我的eclipse应用程序无法读取包(即使在我使用Javadoc读取包之后)而不断出现错误,我最后的办法就是寻求帮助。因此,有人能提供如何做到这一点的煽动/信息吗? 我试过这个:复制所有文件从服务器到Android设备 我试过这个:http://jcifs.samba.org/ 我试过这个:
这基本上意味着我没有读取该文件的权限。
问题内容: 如何从C ++ / Qt Linux应用程序逐行读取FIFO /命名管道? 今天,我可以从Qt程序的fifo中打开和读取数据,但是我无法使该程序逐行读取数据。Qt读取整个文件,这意味着他要等到“发送方”关闭其会话。 让我们以一些shell命令为例,展示我希望应用程序执行的操作。 首先创建一个fifo 然后我们可以用猫从fifo中读取 然后我们与另一只猫一起发送一些数据 然后开始输入内容