美文网首页
app自动命名,更换ICON图标,打包apk配置

app自动命名,更换ICON图标,打包apk配置

作者: 不会看源码 | 来源:发表于2020-05-12 18:01 被阅读0次

1.在gradle编译的时候,通过一个变量切换成自己需要的项目(包名,应用图标,应用名称)
2.打包apk配置,按照需要的格式命名apk
关键点:getBuildType() ,设置这个返回值,处理相关的值(包名,应用图标,应用名称)
附注:这个只是切换不同的编译,不是多渠道打包

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        //动态修改包名
        applicationId "com.iim.myapplication.${getPageName()}"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    //签名的配置
    //注意,signingConfigs要在buildTypes前面
    signingConfigs {
        //正式配置
        release {
            //放签名文件的目录
            //项目/app/keystore
            storeFile file("./keystore/demo_text.jks")
            keyAlias 'test'
            keyPassword '123456'
            storePassword '123456'
            //签名的v1, v2模式
            v1SigningEnabled true
            v2SigningEnabled true
        }
//        debug{
//           需要 debug需要不同的配置
//        }
    }


    buildTypes {
        release {
            //自定义字段
            buildConfigField "int", "BUIL_VERSION_TYPE", "${getBuildType()}"

            //使用release的配置
            signingConfig signingConfigs.release
            //开启混淆
            minifyEnabled true
            //混淆配置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            flavorDimensions "default"
        }

        debug {
            buildConfigField "int", "BUIL_VERSION_TYPE", "${getBuildType()}"
            signingConfig signingConfigs.release
            minifyEnabled false
            debuggable true
            flavorDimensions "default"
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    android.applicationVariants.all {
        variant ->
            variant.outputs.all {
                //这里修改apk文件名
                //打包的apk:哈哈_测试-01_v1.0_1_20200512_release.apk
                outputFileName = "哈哈_${getTypeName()}_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${getCurrentTime()}_${buildType.name}.apk"
            }
    }

    productFlavors {
        dev {
            //更改包名
//            applicationId "com.iim.myapplication.dev1"
            manifestPlaceholders = [ENVIRONMENT:"dev",app_icon: "${getTypeIcon()}"]

            //动态增加string.xml的字段
            resValue "string", "app_name_text", "${getTypeName()}"
        }

        //多渠道配置 --> https://www.jianshu.com/p/00da6153f77e
//        dev02{
//            applicationId "com.iim.myapplication.dev2"
//            //app图标
//            manifestPlaceholders = [ENVIRONMENT:"dev02",app_icon: "@drawable/test_2"]
//            //app名称
//            resValue "string", "app_name_text", "测试-2"
//        }
//
//        dev03{
//            applicationId "com.iim.myapplication.dev3"
//            //app图标
//            manifestPlaceholders = [ENVIRONMENT:"dev03",app_icon: "@drawable/test_3"]
//            //app名称
//            resValue "string", "app_name_text", "测试-3"
//        }
    }
}

//获取编译的版本, 0:测试1版本 1:测试2版本  2:测试3版本
//同时动态修改包名,app名称
static def getBuildType() {
    return 1
}


//获取当前时间
static def getCurrentTime() {
    return new Date().format("yyyyMMdd")
}

static def getPageName() {
    return "test${getBuildType()}"
}

static def getTypeName() {
    return "测试-${getBuildType()}"
}

static def getTypeIcon() {
    if (getBuildType() == 1) {
        return "@drawable/test_1"
    } else if (getBuildType() == 2) {
        return "@drawable/test_2"
    } else {
        return "@drawable/test_3"
    }

}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core-ktx:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

自动配置app的名称,图标
关键点:icon, label

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.iim.myapplication">

    <application
        android:allowBackup="true"
        android:icon="${app_icon}"
        android:label="@string/app_name_text"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

相关文章

网友评论

      本文标题:app自动命名,更换ICON图标,打包apk配置

      本文链接:https://www.haomeiwen.com/subject/gmkinhtx.html