C# 斑马打印机USB接口实现打印各种类型的码

蒟蒻的数据结构清单

  返回  

一套代码打包多个应用,配置不一样的包名、签名

2021/7/20 19:26:11 浏览:

开发某个应用,基本功能是一样的,在打包的时候,区分渠道、配置不同的包名、签名。

1.新建一个工程

很简单,新建一个默认的 Hello World 工程就可以了。

2.新建对应渠道的文件夹

在 src 目录新建一个文件夹 qudao1 ,然后照着 main 文件的样子生成一样的目录,只需要目录,各目录下的文件先不要。
(要也不影响,本篇主要讲配置,不改代码)

在 src 目录新建一个文件夹 qudao2 ,操作同新建 qudao1 。

为了区分,我们简单修改下 string.xml ,

main 下的,

<resources>
    <string name="app_name">OneAppMutilBale</string>
</resources>

qudao1 的,

<resources>
    <string name="app_name">OneAppMutilBaleQudao1</string>
</resources>

qudao2 的,

<resources>
    <string name="app_name">OneAppMutilBaleQudao2</string>
</resources>

3.配置build.gradle

修改 app 的 build.gradle ,

添加 sourceSets { } ,指明各个模块用的文件夹 。添加这个需要配置 flavorDimensions "app" ,要不然报错,app 可以替换成其他名称。

添加 productFlavors { } ,指明渠道,按渠道配置包名、版本号等。
其中的 base 、qudao1、qudao2 自己取名就行。
dimension 对应 flavorDimensions

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 30

    defaultConfig {
        applicationId "com.cosmos.oneappmutilbale"
        minSdkVersion 23
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        flavorDimensions "app"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    sourceSets {
        base {
            java.srcDir('src/main/java')
            res.srcDir('src/main/res')
            // assets.srcDir('src/main/assets')
            // manifest.srcFile('src/main/AndroidManifest.xml')
        }

        qudao1 {
            java.srcDir('src/qudao1/java')
            res.srcDir('src/qudao1/res')
            // assets.srcDir('src/qudao1/assets')
            // manifest.srcFile('src/qudao1/AndroidManifest.xml')
        }
    }
    }

    productFlavors {
        base {
            applicationId "com.cosmos.oneappmutilbale"
            dimension "app"
            versionCode 1
            versionName "1.0"
        }
        qudao1 {
            applicationId "com.cosmos.oneappmutilbale.q1"
            dimension "app"
            versionCode 1
            versionName "1.1"
        }
    }

    applicationVariants.all {
        variant ->
            variant.outputs.all {
                outputFileName = "OneAppMutilBale_${variant.productFlavors[0].name}_v${variant.productFlavors[0].versionName}.apk"
            }
    }
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

applicationVariants.all { } 部分是指定生成的 apk 的名字。

同步一下,如果在 Build Variants 栏出现多选,说明成功了。
在这里插入图片描述

4.配置不同的渠道签名

通过 AS 生成多个 jks 签名。(具体过程省略)

我新建了一个 jks 目录用来存放 jks 签名文件。

修改 app 的 build.gradle ,

添加 signingConfigs { } ,指明 jks 路径和密码。其中的 signbase 、signqudao1 、signqudao2 自己取名就行。

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 30

    defaultConfig {
        applicationId "com.cosmos.oneappmutilbale"
        minSdkVersion 23
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        flavorDimensions "app"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    sourceSets {
        base {
            java.srcDir('src/main/java')
            res.srcDir('src/main/res')
            // assets.srcDir('src/main/assets')
            // manifest.srcFile('src/main/AndroidManifest.xml')
        }

        qudao1 {
            java.srcDir('src/qudao1/java')
            res.srcDir('src/qudao1/res')
            // assets.srcDir('src/qudao1/assets')
            // manifest.srcFile('src/qudao1/AndroidManifest.xml')
        }

        qudao2 {
            java.srcDir('src/qudao2/java')
            res.srcDir('src/qudao2/res')
            // assets.srcDir('src/qudao2/assets')
            // manifest.srcFile('src/qudao2/AndroidManifest.xml')
        }
    }

    signingConfigs {
        signbase {
            storeFile file("src/jks/main.jks")
            storePassword "123456"
            keyAlias "keymain"
            keyPassword "123456"
            // 开启 V2 签名
            v2SigningEnabled true
        }
        signqudao1 {
            storeFile file("src/jks/qudao1.jks")
            storePassword "789456"
            keyAlias "keyqudao1"
            keyPassword "789456"
            v2SigningEnabled true
        }
        signqudao2 {
            storeFile file("src/jks/qudao2.jks")
            storePassword "456123"
            keyAlias "keyqudao2"
            keyPassword "456123"
            v2SigningEnabled true
        }
    }

    productFlavors {
        base {
            applicationId "com.cosmos.oneappmutilbale"
            dimension "app"
            versionCode 1
            versionName "1.0"
            signingConfig signingConfigs.signbase
        }
        qudao1 {
            applicationId "com.cosmos.oneappmutilbale.q1"
            dimension "app"
            versionCode 1
            versionName "1.1"
            signingConfig signingConfigs.signqudao1
        }
        qudao2 {
            applicationId "com.cosmos.oneappmutilbale.q2"
            dimension "app"
            versionCode 2
            versionName "2.0"
            signingConfig signingConfigs.signqudao2
        }
    }

    applicationVariants.all {
        variant ->
            variant.outputs.all {
                outputFileName = "OneAppMutilBale_${variant.productFlavors[0].name}_v${variant.productFlavors[0].versionName}.apk"
            }
    }
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

这里我用了不一样的签名,生成的 apk 签名肯定是不一样的。如何验证呢?

build 之后,会在 app/build/outputs/apk/ 目录生成多个渠道的 apk ,在 Terminal 栏使用如下命令查看 apk 的签名,

keytool -printcert -jarfile apk_path

apk_path 是 apk 的路径。
在这里插入图片描述
3 个渠道的 apk ,对应的结果是不一样的,说明已配置了不一样的签名。

5.安装验证

3 个渠道的应用,包名不一样,可以安装到同一台机器上。对应的 app_name 也不一样。

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号