关于AndroidStudio的打包数字签名以及多渠道发布

AndroidStudio右侧Gradle里边的build(工程下的)是可以生成未签名的debug和release的apk包生成前可以先clean一下工程

app下的build.gradle里边的

lintOptions{
abortOnError false
}
是用来取消检查错误直接打包


buildTypes {
//设置为true进行混淆proGuard
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

是用来混淆 默认是false


//配置软件包打包的时候 准备不同的渠道
productFlavors {
//渠道的名称 生成不同的包
baidu {

applicationId  "cn.fangz.baidu"

// 对resValue在java代码中的使用:String app_id = getResources().getString(R.string.app_id);

resValue("string", "app_id", "50074")

resValue("string", "app_start", "1")

// 对manifestPlaceholders中资源的使用:在AndroidManifest.xml文件中的application节点下

// andorid:icon="${icon}"

//android:app_name="${app_name}"

manifestPlaceholders = [app_name: "@string/app_name_agiledata", icon: "@drawable/ic_launcher"]

}

qihoo {
minSdkVersion 10
applicationId 'com.ceshi.updateadapter.qihoo.app'
}
}

对应于不同渠道由于appid不同所以生成了不同的版本的apk文件
还有就是可以在src下建立free paid文件夹建立不同的AndroidManifest.xml文件修改入口即可运行一个程序的不同版本如果没有的资源会去找main文件夹下的资源(类似国际化) 在Build Variants 修改运行的程序

以上都是放在android 下

Build菜单里生成keystore文件一般放在工程目录下 之后签名时需要选择目录就是cd../ 上级目录里选 最后在buildtype左边小栏选择release版本 ok

apply plugin: 'com.android.application'

android {
    //数字签名证书以及密钥温家的配置 可以在以后不同的渠道设置
    signingConfigs {
        mykeystore {
            keyAlias 'my_release_key'
            keyPassword '123456'
            storeFile file('../release.jks')
            storePassword '123456'
        }
    }
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
    defaultConfig {
        applicationId "com.ceshi.updateadapter"
        minSdkVersion 9
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        //设置为true进行混淆proGuard
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.mykeystore
        }
        debug {
        }
    }
    lintOptions {
        abortOnError false
    }
    //配置软件包打包的时候 准备不同的渠道
    productFlavors {
        //渠道的名称 生成不同的包

baidu {

applicationId  "cn.fangz.baidu"

// 对resValue在java代码中的使用:String app_id = getResources().getString(R.string.app_id);

resValue("string", "app_id", "50074")

resValue("string", "app_start", "1")

// 对manifestPlaceholders中资源的使用:在AndroidManifest.xml文件中的application节点下

// andorid:icon="${icon}"

//android:app_name="${app_name}"

manifestPlaceholders = [app_name: "@string/app_name_agiledata", icon: "@drawable/ic_launcher"]

}


        qihoo {
            minSdkVersion 10
            applicationId 'com.ceshi.updateadapter.qihoo.app'
        }

        paid{
            minSdkVersion 10
            applicationId 'com.ceshi.updateadapter.paid.app'
        }

       free{
            minSdkVersion 10
            applicationId 'com.ceshi.updateadapter.free.app'
        }

    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:22.2.0'
//选择性对应不同渠道去与依赖不同的jar包
    paidCompile files('src/libs/ShareSDK-QQ-2.7.9.jar');
  freeCompile file('src/libs/123.jar');

}


最后值得一说的是 如果不同渠道所需的java文件 如同名的Activity内容逻辑不一样的话 可以建立对应于main文件夹的相应文件夹 对应于包下的同名Activity实现不同的逻辑即可


原文地址:https://www.cnblogs.com/bimingcong/p/4970229.html