Android 完成打包编译流程

Android 打包签名配置和流程

AndroidStudio 中打包是非常Very的方便的

首先介绍 gradle Task的方式打包

1. 创建apk签名文件(如果你已经创建过,请忽略这个步骤)

菜单栏一次选中 build -> Generate Signed Bundle / APK... -> APK -> Create New -> 填写对应信息 然后确定,签名文件就创建成功了

注意方框中都是必须要填写的值

2.moudle 的build文件 中配置签名文件相关的信息

app/build.gradle

android {
	signingConfigs {

        debug {
            storeFile file('../demoKey.jks')
            storePassword '123456'
            keyAlias 'demoKey'
            keyPassword '123456'
        }

        release {
            storeFile file('../demoKey.jks')
            storePassword '123456'
            keyAlias 'demoKey'
            keyPassword '123456'
        }
    }
}

其中 ‘…/demoKey.jks’ 表示签名文件在当前build.gradle文件的上一级目录(准确说是和当前运行的moudle 有关系)
当然你可以生成多个签名文件 ,debug和release使用不同的签名,当然我们一般的都是使用相同签名的,因为这样调试比较的方便

3.指定签名文件使用配置签名信息

android {
	signingConfigs {

        debug {
            storeFile file('../demoKey.jks')
            storePassword '123456'
            keyAlias 'demoKey'
            keyPassword '123456'
        }

        release {
            storeFile file('../demoKey.jks')
            storePassword '123456'
            keyAlias 'demoKey'
            keyPassword '123456'
        }
    }

   //这一段必须在上面一段代码的下面

	
    buildTypes {
        debug {
			//混淆使能
            minifyEnabled false
			//配置混淆指定文件,混淆代码必须写在这个文件里面
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
			//指定签名使用使用哪一个
            signingConfig signingConfigs.debug
        }
        release {
            minifyEnabled false
			//配置混淆指定文件,混淆代码必须写在这个文件里面
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
			//指定签名使用使用哪一个
            signingConfig signingConfigs.release
        }
    }


}

5. 渠道配置

android {
	signingConfigs {

        debug {
            storeFile file('../demoKey.jks')
            storePassword '123456'
            keyAlias 'demoKey'
            keyPassword '123456'
        }

        release {
            storeFile file('../demoKey.jks')
            storePassword '123456'
            keyAlias 'demoKey'
            keyPassword '123456'
        }
    }

   //这一段必须在上面一段代码的下面

	
    buildTypes {
        debug {
			//混淆使能
            minifyEnabled false
			//配置混淆指定文件,混淆代码必须写在这个文件里面
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
			//指定签名使用使用哪一个
            signingConfig signingConfigs.debug
        }
        release {
            minifyEnabled false
			//配置混淆指定文件,混淆代码必须写在这个文件里面
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
			//指定签名使用使用哪一个
            signingConfig signingConfigs.release
        }
    }


	//配置发布渠道
	productFlavors {
        baidu {}  //渠道名
        productFlavors.all {
            flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    	}
	}

}

6. 渠道配置 AndroidManifest.xml 文件节点

     <meta-data
        android:name="UMENG_CHANNEL"
        android:value="${UMENG_CHANNEL_VALUE}" />

注意 UMENG_CHANNEL_VALUE 需要和build文件中的 [UMENG_CHANNEL_VALUE: name] 对应

7.配置apk输出文件

android {

	...	

	 // 自定义输出配置,这里我们加上APK版本号1.0
    applicationVariants.all { variant ->
        variant.outputs.all { output -> // each 改为 all
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                // 输出apk名称为wooyun_v1.0_wandoujia.apk
                def fileName = "beautifulLife_v${defaultConfig.versionName}_${variant.productFlavors[0].name}_${variant.buildType.signingConfig.name}.apk"
                // File file = new File(outputFile.parent, "build/outputs/apk/relaseApks")
                File file = new File(outputFile.parent)
                if (!file.exists()) {
                    file.mkdirs()
                }
                outputFileName = fileName  //  output.outputFile 改为 outputFileName
            }
        }
    }
}

8.开开心心的打包吧


版权声明:本文为bencheng06原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。