北京猎梦网站建设,怎么让自己的网站被百度收录,网站建设案例基本流程,网站模板内容怎么添加图片app打包生成apk后通常需要进行备份#xff0c;但是要区分好哪个apk是什么版本的、什么时候打包的#xff0c;以方便以后区分使用。
最开始的想法是把版本号、创建时间这些加在apk文件名上即可#xff0c;但是公司要求apk使用一个固定的名称#xff0c;那我怎么保存版本号信…app打包生成apk后通常需要进行备份但是要区分好哪个apk是什么版本的、什么时候打包的以方便以后区分使用。
最开始的想法是把版本号、创建时间这些加在apk文件名上即可但是公司要求apk使用一个固定的名称那我怎么保存版本号信息啊后来想到可以加一个文件夹在文件夹名字上加入这些信息即可示例如一
app/build.gradle
import java.text.SimpleDateFormatandroid {//release版本输出位置与文件名配置applicationVariants.all { variant -variant.outputs.all { output -if (buildType.name release) { //只处理生产版本def createTime new Date().format(yyyy-MM-dd-kkmmss, TimeZone.getTimeZone(GMT08:00))def dirName ball_v${defaultConfig.versionName}_${defaultConfig.versionCode}_$createTimedef apkDir rootProject.file(apk/$dirName)if (!apkDir.exists()) {apkDir.mkdirs()}variant.packageApplicationProvider.get().outputDirectory apkDir // 指定apk的输出位置output.outputFileName Railway_4G_Platform_ball.apk // 指定输出文件名}}}
}这里省略了很多其它的信息只贴关键代码导包是要放在文件的最前面关键代码要是写在android节点下的。
上面是以前的写法了现在今天是2024年03月07日最新版本Android Studio已经使用了更新的Gradle而且新创建的项目也默认使用Kotlin作为gradle的脚本语言了那肯定是要追随官方的脚步啊于是想把上面的配置翻译成Kotlin的版本即可发现已经用不了新版本的Gradle已经不允许那种方式来修改apk的名称了于是又找了新的方式感觉新的方式还更专业一些如下
import java.time.LocalDateTime
import java.time.format.DateTimeFormatterandroid { afterEvaluate {tasks.named(assembleRelease) {finalizedBy(copyAndRenameApkTask)}}
}val copyAndRenameApkTask by tasks.registering(Copy::class) {val config project.android.defaultConfigval versionName config.versionNameval versionCode config.versionCodeval formatter DateTimeFormatter.ofPattern(yyyy-MM-dd-HHmmss)val createTime LocalDateTime.now().format(formatter)val destDir File(rootDir, apkBackup/big_data_v${versionName}_${versionCode}_$createTime)from(build/outputs/apk/release/app-release.apk)into(destDir)rename { _ - Railway_4G_Platform_big_data.apk }
}与前面的修改方式对比
前面的是直接修改了打包apk的位置和apk的文件名。用的是groovy语言。后面的是打包后apk后复制该apk到指定的位置并进行重命名。用的是kotlin语言平时写代码也是用Kotlin了所以使用kotlin还是感觉比较亲切的。
打包两个版本的apk看一效果 这样我就完成了以公司要求的名字去命名apk同时我使用文件夹名称来保留了apk的版本信息。
我们公司的apk在上传到公司服务器时除了上传apk外还需要填写apk的相关信息比如包名、版本号这些同时也允许通过上传一个配置文件来指定这些信息像这样每次打包每次要修改这些信息也是挺烦人的都说Gradle可以完成自动化的事情于是让Gradle帮我生成一个不就行了吗实现这个很简单在之前的复制重命名的任务中添加生成配置文件的代码即可如下
val copyAndRenameApkTask by tasks.registering(Copy::class) {val config project.android.defaultConfigval versionName config.versionNameval versionCode config.versionCodeval applicationId config.applicationIdval timeFormatter DateTimeFormatter.ofPattern(yyyy-MM-dd-HHmmss)val dateFormatter DateTimeFormatter.ofPattern(yyyy-MM-dd-HHmmss)val now LocalDateTime.now()val createTime now.format(timeFormatter)val createDate now.format(dateFormatter)val destDir File(rootDir, apkBackup/big_data_v${versionName}_${versionCode}_$createTime)from(build/outputs/apk/release/app-release.apk)into(destDir)rename { _ - Railway_4G_Platform_big_data.apk }doLast {File(destDir, app上传配置.txt).outputStream().bufferedWriter().use {it.appendLine(版本号:${versionCode}).appendLine(版本名称:${versionName}).appendLine(软件名称:掌上运维).appendLine(软件包名:${applicationId}).appendLine(版本说明:说明).appendLine(发布时间:${createDate}).appendLine(发布状态:1).appendLine(更新类型:0) // 0-询问更新1-强制更新到此版本.appendLine(强制更新标记:0) // 0-此版本无需强制更新1-此版本不能使用必须更新(此参数始终传0).appendLine(软件分类:1).appendLine(业务分类:1).appendLine(软件级别:1).append(备注:)}}
}效果如下 app上传配置.txt内容如下
版本号:20240307
版本名称:1.0.0
软件名称:掌上运维
软件包名:cn.dazhou.bluebook
版本说明:说明
发布时间:2024-03-07-154401
发布状态:1
更新类型:0
强制更新标记:0
软件分类:1
业务分类:1
软件级别:1
备注:另外还可以把git的提交记录添加到文件夹中以便可以清楚的知道打包的时候git的当时提交版本是什么所以在打包的时候一定要先把所有代码提交了再打包核心代码如下
import java.io.ByteArrayOutputStreamfun exec(command: String): String {val outputStream ByteArrayOutputStream()val process Runtime.getRuntime().exec(command)process.inputStream.copyTo(outputStream)return outputStream.toString().trim()
}val copyAndRenameApkTask by tasks.registering(Copy::class) {。。。val gitHash exec(git rev-parse --short HEAD)val destDir File(rootDir, apkBackup/big_data_v${versionName}_${versionCode}_${createTime}_$gitHash)。。。
}另外由groovy转到kotlin带来的一些改变这里也一并记录一下
签名配置
android {signingConfigs {create(release) {storeFile file(123456.jks)storePassword 123456keyAlias key0keyPassword 123456}}buildTypes {release {isMinifyEnabled falseproguardFiles(getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro)signingConfig signingConfigs.getByName(release)}}
}在libs目录中添加jar或aar时的配置
implementation(fileTree(mapOf(include to arrayOf(*.jar, *.aar), dir to libs)))对比原来Groovy的配置
implementation(fileTree(includes: [*.jar, *.aar], dir: libs))仓库设置
maven {isAllowInsecureProtocol true // 仓库默认不允许使用非https协议所以这里设置为允许url uri(http://192.168.1.251:8081/content/repositories/android_repositories/)
}
maven { url uri(https://jitpack.io) }对比原来Groovy的配置 maven {allowInsecureProtocol true // 仓库默认不允许使用非https协议所以这里设置为允许url http://192.168.1.251:8081/content/repositories/android_reposito}maven { url https://jitpack.io } // 用于RxPermissions