BuildGradle自定义打包

一 属性了解


// 声明是Android程序,
//com.android.application 表示这是一个应用程序模块,可直接运行
//com.android.library 标识这是一个库模块,是依附别的应用程序运行
apply plugin: 'com.android.application'
 
android {
    //编译sdk的版本,也就是API Level,例如API-19、API-20、API-21等等。
    compileSdkVersion 26
    //build tools的版本,其中包括了打包工具aapt、dx等等。
    //这个工具的目录位于你的sdk目录/build-tools/下
    buildToolsVersion '26.0.2'
 
    //关闭Android Studio的PNG合法性检查
    aaptOptions.cruncherEnabled = false
    aaptOptions.useNewCruncher = false
 
    defaultConfig {  //默认配置
        applicationId "com.hebbe.espressotest" //应用程序的包名
        minSdkVersion 22  //最小sdk版本,如果设备小于这个版本或者大于maxSdkVersion将无法安装这个应用
        targetSdkVersion 26 //目标sdk版本,充分测试过的版本(建议版本)
        versionCode 1  //版本号,第一版是1,之后每更新一次加1
        versionName "1.0" //版本名,显示给用户看到的版本号
 
        //Instrumentation单元测试
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

 // 开启multidex 是否可以分包
        multiDexEnabled true
        ndk {
            //设置支持的SO库架构
            abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
        }
    }
 
//项目release和debug模式
    buildTypes {
        release {
            //是否可以移出无用的java代码,默认为false
            minifyEnabled false
            //是否使用zipAlign优化apk,Android sdk包里面的工具,能够对打包的应用程序进行优化,让整个系统运行的更快
            zipAlignEnabled false
            //指定插件使用的混淆文件  //混淆的配置文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.releaseConfig
        }

        debug {
            minifyEnabled false
            zipAlignEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.releaseConfig
        }
    }
}
//指定当前项目的所有依赖关系:本地依赖、库依赖、远程依赖
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar']) //本地依赖
    //远程依赖,com.android.support是域名部分,appcompat-v7是组名称,26.1.0是版本号
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12' //声明测试用列库
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

二.签名配置  需要放在清单文件android {}里面

android{
    //签名配置文件
    signingConfigs {
        releaseConfig {
            storeFile file('liemi.jks')
            storePassword '123456'
            keyAlias 'liemi'
            keyPassword '123456'
        }
    }
}

三.自定义打包配置主要对多个打包方式进行自定义,需要放在清单文件android {}里面和四配合使用,还需要将下面这句放在

defaultConfig里面开启
flavorDimensions "项目BASE"  // 这里的名字好像随意,不是很清楚作用 -。-!
android{
  //多维度打包
    productFlavors{
        app1{
            //如果这里没有配置  appId、 versionCode等信息 则取“defaultConfig”里面的默认值
//            applicationId "com.demo.one"
//            versionCode 20190223
//            versionName "1.1.4"

            // 动态添加字符串资源到 strings.xml  跟直接在strings.xml 用法一致
            resValue "string", "mapp_name", "App1"

            // 定义常量  相当于 public static final String   可通过代码   “BuildConfig.APP_DIR”  调用
            buildConfigField "String"   , "APP_DIR"      , '"app1"'
            buildConfigField "int"   , "APP_TYPE"      , "1"
            buildConfigField "Boolean", "ENVIRONMENT", "true"

            // 清单文件 需要动态设置的内容 需在此配置
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "app1",
                                    app_icon           : "@mipmap/logo",
            ]
        }
        app2{
//            applicationId "com.demo.two"
//            versionCode 1
//            versionName "1.2.1"
            resValue "string", "mapp_name", "App2"
            buildConfigField "String"   , "APP_DIR"      , '"app2"'
            buildConfigField "int"   , "APP_TYPE"      , "2"
            buildConfigField "Boolean", "ENVIRONMENT", "false"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "app2",
                                    app_icon           : "@mipmap/logo",
            ]
        }
    }
}

四.自定义多个打包不同的图片logo  和第三步配合

清单文件

如桌面图标 可以通过 android:icon="${app_icon}" 设置 主题、应用名等均可动态配置,但清单文件里更换资源 需在build.gradle配置,其它布局资源则只需要放置在不同的res对应文件内即可

<application
        android:allowBackup="true"
        android:icon="${app_icon}"
        android:label="@string/mapp_name"
        android:roundIcon="${app_icon}"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
           
        </activity>
    </application>
  •  

更改资源文件

如下图 ,不同的appid 可创建文件夹与mian文件夹同级,且里面的文件夹路径需与main文件夹里面的“完全一致”方可生效,在运行时相同名字的资源会自动覆盖,诺在对应的文件夹找不到相应名称的资源文件,则会自动匹配main文件夹下面的资源文件(例如: app1 的mipmap里面没有bg.jpg , 则会自动采用main里面的pg.jpg作为app1的资源),注意:java文件不会自动合并,且不能重复,如果java文件也需要动态配置,则main里面不能有动态的java文件,动态的java文件在main以外的文件夹都需要包含有。
在这里插入图片描述

动态java文件、代码

在这里插入图片描述

打包

配置key
appId对应不同的key

配置完key后 就轮到打包了

配合打包后的apk的命名,那样我们就不需要打包完后再自己去命名啦~

 android{
// 打包命名
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            if (variant.buildType.name.equals('release')) {
                //生成apk名字的格式:ChannelV1.0.0_2016-06-22_baidu.apk
                //可自定义自己想要生成的格式
                outputFileName = "${variant.productFlavors[0].resValues.get("mapp_name").value}_V${variant.productFlavors[0].versionName}_${releaseTime()}.apk"
            }else if(variant.buildType.name.equals('debug')){
                outputFileName = "${variant.productFlavors[0].resValues.get("mapp_name").value}_V${variant.productFlavors[0].versionName}_${debugTime()}_debug.apk"
            }
        }
    }
}
def releaseTime() {
    return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC+8"))
}
def debugTime() {
    return new Date().format("MMdd HH.mm", TimeZone.getTimeZone("UTC+8"))
}

打包

双击对应的项就可以打包了
在这里插入图片描述

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 开发中,Gradle 是一个非常重要的构建工具,可以用来构建和打包 Android 应用程序。Gradle 插件是一种工具,可以扩展 Gradle 的功能,使其能够支持更多的功能。而多渠道打包Android 应用程序开发中非常重要的一个方面,它可以让我们将应用程序打包成不同的版本,并发布到不同的应用商店或市场上。 在 Android Studio 中,我们可以通过自定义 Gradle 插件来实现多渠道打包,具体步骤如下: 1. 创建 Gradle 插件项目 在 Android Studio 中创建一个新项目,选择 Gradle 插件项目模板。这将创建一个 Gradle 插件项目,并生成一些默认的代码和文件。 2. 实现多渠道打包 在插件项目中,我们需要实现多渠道打包的功能。这可以通过 Gradle 的 productFlavors 和 buildTypes 配置来实现。我们可以定义多个 productFlavors,并为每个 productFlavor 配置不同的参数,例如应用程序的包名、应用程序名称等。在 buildTypes 中,我们可以为每个 buildType 配置不同的参数,例如应用程序的版本号、是否开启混淆等。 3. 打包应用程序 在插件项目中,我们可以编写一个 Gradle 任务来实现应用程序的打包。这个任务可以使用 Gradle 提供的 assemble 任务来实现。我们可以为每个 productFlavor 和 buildType 配置不同的打包参数,并使用 Gradle 的 assemble 任务来生成应用程序的 APK 文件。 4. 发布应用程序 在插件项目中,我们可以编写一个 Gradle 任务来实现应用程序的发布。这个任务可以使用 Gradle 提供的 uploadArchives 任务来实现。我们可以为每个 productFlavor 和 buildType 配置不同的发布参数,并使用 Gradle 的 uploadArchives 任务将应用程序发布到不同的应用商店或市场上。 总的来说,自定义 Gradle 插件多渠道打包Android 应用程序开发中非常重要的一个方面。通过自定义 Gradle 插件,我们可以实现更加灵活和高效的应用程序打包和发布。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值