当前位置: 首页 > article >正文

Android APK打包脚本

build.gradle版本

同目录创建config.gradle文件写入需要的信息入

在这里插入图片描述

config.gradle文件内容
ext {
/**
 * 自定义APP运行环境
 * dev: 开发
 * test: 测试
 * pro: 生产
 */
env = "pro"
/**
 * 动态参数配置,根据自己需要添加参数
 * APP_ID: 包名
 * VERSION_CODE: 版本号
 * VERSION_NAME: 版本名
 * HOST: 网络请求前缀
 */
dev = [
    APP_ID: "包名",
    APP_NAME: "(开发版)",
    VERSION_CODE: 1,
    VERSION_NAME: "1.0.0",
    HOST: "网络请求前缀"
]
pro = [
    APP_ID: "包名",
    APP_NAME: "正式包",
    VERSION_CODE: 1,
    VERSION_NAME: "1.0.0",
    HOST: "网络请求前缀",
]
//签名文件
sign = [
    STORE_FILE: "文件地址",
    STORE_PASSWORD: "密码",
    KEY_ALIAS: "秘钥名",
    KEY_PASSWORD: "秘钥密码"
	]
}

build.gradle中如何引用


使用 apply from: ‘config.gradle’ 添加脚本文件
将build.gradle文件中的相关信息替换成脚本文件的内容

def env = project.ext.env // 环境
def config = project.ext[env] // 根据环境获取配置信息
def sign = project.ext.sign
//noinspection GradleCompatible
compileSdkVersion 31
buildToolsVersion "29.0.3"

defaultConfig {
    applicationId config.APP_ID
    minSdkVersion 21
    //noinspection ExpiredTargetSdkVersion
    targetSdkVersion 29
    versionCode config.VERSION_CODE
    versionName config.VERSION_NAME

    resValue "string", "app_name", config.APP_NAME

    buildConfigField "String", "HOST", "\"${config.HOST}\""
    buildConfigField "String", "PATH", "\"${config.PATH}\""
    buildConfigField "String", "HALL_OID", "\"${config.HALL_OID}\""

    manifestPlaceholders = [FILE_PROVIDER_AUTHORITIES: config.APP_ID + ".fileProvider"]
    signingConfigs {
    release {
        storeFile file(sign.STORE_FILE)
        storePassword sign.STORE_PASSWORD
        keyAlias sign.KEY_ALIAS
        keyPassword sign.KEY_PASSWORD
        v1SigningEnabled true
        v2SigningEnabled true
    }
}

//设置打包生成的apk命名
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        applicationVariants.all { variant ->
            variant.outputs.all { output ->
                if(!variant.buildType.isDebuggable()) {
                    outputFileName = "${config.APP_NAME}_V${variant.versionName}_${new Date().format("yyyyMMddHHmm")}.apk"
                }
            }
        }
        signingConfig signingConfigs.release
    }
}

build.gradle.kts版本

创建的config.gradle文件,内容见上方config.gradle文件内容

build.gradle和build.gradle.kts的区别在于前面是常规的写法,后面是kotlin写法。

添加脚本文件

apply(from = "config.gradle")

替换内容

val env = extra["env"] as String
val config = extra[env] as Map<*, *>
val sign = extra["sign"] as Map<*, *>
namespace = config["APP_ID"] as String

compileSdk = 34

defaultConfig {
    applicationId = config["APP_ID"] as String
    minSdk = 21
    targetSdk = 34
    versionCode = config["VERSION_CODE"] as Int
    versionName = config["VERSION_NAME"] as String

    testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

    resValue("string", "app_name", config["APP_NAME"] as String)
    buildConfigField("String", "HOST", "\"${config["HOST"] as String}\"")
    buildConfigField("String", "WEBSOCKET", "\"${config["WEBSOCKET"] as String}\"")
    buildConfigField("String", "APP_KEY", "\"${config["APP_KEY"] as String}\"")
    buildConfigField("String", "APP_SECRET", "\"${config["APP_SECRET"] as String}\"")

    manifestPlaceholders["FILE_PROVIDER_AUTHORITIES"] = applicationId + ".fileProvider"
}

signingConfigs {
    getByName("debug") {
        storeFile = file(sign["STORE_FILE"] as String)
        storePassword = sign["STORE_PASSWORD"] as String
        keyAlias = sign["KEY_ALIAS"] as String
        keyPassword = sign["KEY_PASSWORD"] as String
    }
    create("release") {
        storeFile = file(sign["STORE_FILE"] as String)
        storePassword = sign["STORE_PASSWORD"] as String
        keyAlias = sign["KEY_ALIAS"] as String
        keyPassword = sign["KEY_PASSWORD"] as String
    }
}
//编写打包生成的apk名是使用了日期个时间的类型,kotlin不像build.gradle可以直接使用需要引入相关类
//import java.text.SimpleDateFormat
//import java.util.Date

buildTypes {
    release {
        isMinifyEnabled = false
        proguardFiles(
            getDefaultProguardFile("proguard-android-optimize.txt"),
            "proguard-rules.pro"
        )
        applicationVariants.all {
            outputs.all {

                if (this is com.android.build.gradle.internal.api.ApkVariantOutputImpl)
                    outputFileName = "${config["APP_NAME"] as String}_V${config["VERSION_NAME"] as String}_${ SimpleDateFormat("yyMMdd").format(
                        Date()
                    ) }.apk"

            }
        }
    }
}

项目中使用脚本字段,先编译项目,生成BuildConfig
直接在项目中使用 BuildConfig.VERSION_CODE 获取包名或者项目版本。

其中 manifestPlaceholders = [FILE_PROVIDER_AUTHORITIES: config.APP_ID + “.fileProvider”] 创建的是FileProvider中的authorities属性

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${FILE_PROVIDER_AUTHORITIES}"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

项目中使用

FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileProvider", apk);

需要修改的话只需要在config.gradle脚本文件中修改相关字段并重新编译项目即可


http://www.kler.cn/a/283191.html

相关文章:

  • 阿里云centos7.9服务器磁盘挂载,切换服务路径
  • 优化时钟网络之时钟抖动
  • Linux git-bash配置
  • Linux kernel 堆溢出利用方法(二)
  • 猿创征文|Inscode桌面IDE:打造高效开发新体验
  • Ollama的安装以及大模型下载教程
  • 非阻塞式定时器 apscheduler
  • 力扣8.28
  • 2024年八大在线流程图工具推荐,快来试试吧!
  • 基于asp.net的在线考试系统源码分享
  • Mysql8.x配置详解
  • 回归预测|基于CNN-LSTM-Attention结合Adaboost集成数据预测Matlab程序 多特征输入单输出
  • 喜羊羊做Python二级(模拟考试--易错点)
  • 算法练习: 矩阵置零
  • 对于虚拟机上的相关命令
  • leetcode 19.删除链表的倒数第N个结点
  • LuaJit分析(七)LuaJit -b 命令分析
  • Linux基础 -- 网络工具之curl使用
  • 【JAVA】后端开发中的数据结构:基础知识与应用场景
  • 从 7000 余项目脱颖而出,飞轮科技《新一代实时分析数据仓库解决方案》荣获 HICOOL 2024 全球创业大赛二等奖
  • Oracle字符串聚合函数LISTAGG
  • AI创新,DataOps聚能 | 白鲸开源DTCC共话DataOps新篇章
  • 封装信号灯集相关API
  • 【JavaEE】深入浅出 Spring AOP:概念、实现与原理解析
  • HarmonyOS(AIP12 Beta5版)鸿蒙开发:选择条件渲染和显隐控制
  • 全志/RK安卓屏一体机:智能家居中控屏,支持鸿蒙国产化