android gradle统一版本管理、签名打包配置和模块开发

本文详细介绍如何在Android项目中配置签名文件,包括创建sign.properties文件定义签名属性,以及在build.gradle中设置签名配置。同时,讲解了如何通过config.gradle统一管理版本和依赖,实现模块化开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完整代码地址:https://gitee.com/android100/modulepro111

一、配置签名文件

将签名文件放在根目录中,

在这里插入图片描述

创建一个sign.properties文件,并定义好签名所需要的属性:

# release
# 自己创建一个
storePassword=xq123456
keyPassword=xq123456
keyAlias=key0
storeFile=../key.jks
# debug
# 默认签名文件位置:C:\Users\able\.android
storePassword_debug=android
keyPassword_debug=android
keyAlias_debug=androiddebugkey
storeFile_debug=../debug.keystore

在app的build.gradle中配置签名:

//获取properties
def keystorePropertiesFile = rootProject.file("sign.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    //添加
    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
        debug {
            keyAlias keystoreProperties['keyAlias_debug']
            keyPassword keystoreProperties['keyPassword_debug']
            storeFile file(keystoreProperties['storeFile_debug'])
            storePassword keystoreProperties['storePassword_debug']
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            //修改
            signingConfig signingConfigs.release
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            //修改
            signingConfig signingConfigs.debug
        }
    }
}

使用gradle脚本可以直接打包,然后在build文件夹中看到:
在这里插入图片描述

二、统一管理版本

  1. 创建一个config.gradle文件,并定义版本和依赖:
    在这里插入图片描述
ext {
    android = [
            compileSdkVersion: 28,
            buildToolsVersion: "28.0.3",
            minSdkVersion    : 17,
            targetSdkVersion : 28,
            versionCode      : 1,
            versionName      : "1.0.0",
            applicationId    : "com.example.myandroidconfig",
    ]

    version = [
            androidSupportSdkVersion: "28.0.0",
            retrofitSdkVersion      : "2.4.0",
            glideSdkVersion         : "4.8.0",
            canarySdkVersion        : "1.5.4",
            constraintVersion       : "1.0.2",
            okhttp                  : "3.8.1"
    ]

    dependencies = [
            //support
            "appcompat-v7"            : "com.android.support:appcompat-v7:${version["androidSupportSdkVersion"]}",
            "design"                  : "com.android.support:design:${version["androidSupportSdkVersion"]}",
            "palette"                 : "com.android.support:palette-v7:${version["androidSupportSdkVersion"]}",
            "support-v4"              : "com.android.support:support-v4:${version["androidSupportSdkVersion"]}",
            "cardview-v7"             : "com.android.support:cardview-v7:${version["androidSupportSdkVersion"]}",
            "annotations"             : "com.android.support:support-annotations:${version["androidSupportSdkVersion"]}",
            "recyclerview-v7"         : "com.android.support:recyclerview-v7:${version["androidSupportSdkVersion"]}",
            "constraint-layout"       : "com.android.support.constraint:constraint-layout:${version["constraintVersion"]}",
            "percent"                 : "com.android.support:percent:${version["androidSupportSdkVersion"]}",
            "dynamic"                 : "com.android.support:support-dynamic-animation:${version["androidSupportSdkVersion"]}",
            "multidex"                : "com.android.support:multidex:1.0.2",

            //network
            "retrofit"                : "com.squareup.retrofit2:retrofit:${version["retrofitSdkVersion"]}",
            "retrofit-converter-gson" : "com.squareup.retrofit2:converter-gson:${version["retrofitSdkVersion"]}",
            "retrofit-adapter-rxjava2": "com.squareup.retrofit2:adapter-rxjava2:${version["retrofitSdkVersion"]}",
            "okhttp"                  : "com.squareup.okhttp3:okhttp:${version["okhttp"]}",
            "logging-interceptor"     : "com.squareup.okhttp3:logging-interceptor:${version["okhttp"]}",
            "rxandroid2"              : "io.reactivex.rxjava2:rxandroid:2.1.0",
            "rxjava2"                 : "io.reactivex.rxjava2:rxjava:2.1.11",
            "rxrelay"                 : "com.jakewharton.rxrelay2:rxrelay:2.0.0",

            "retrofit-adapter-rxjava" : 'com.squareup.retrofit2:adapter-rxjava:2.1.0',
            "rxandroid"               : "io.reactivex.rxjava2:rxandroid:1.2.1",
            "rxjava"                  : "io.reactivex.rxjava2:rxjava:1.2.1",


            //router
            "router"                  : "com.alibaba:arouter-api:1.4.1",
            "router-compiler"         : "com.alibaba:arouter-compiler:1.2.2",

            //image
            "glide"                   : "com.github.bumptech.glide:glide:${version["glideSdkVersion"]}",
            "glide-compiler"          : "com.github.bumptech.glide:compiler:${version["glideSdkVersion"]}",
            "glide-transformations"   : "jp.wasabeef:glide-transformations:3.3.0",
            "picasso"                 : "com.squareup.picasso:picasso:2.5.2",
            "takephoto"               : "com.jph.takephoto:takephoto_library:4.0.3",
            "imagepicker"             : "com.lzy.widget:imagepicker:0.5.0",

            //view
            "tablayout"               : "com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar",
            "flowlayout"              : "com.zhy:flowlayout-lib:1.0.3",

            //tools
            "eventbus"                : "org.greenrobot:eventbus:3.0.0",
            "dagger"                  : "com.google.dagger:dagger:2.13",
            "utilcode"                : "com.blankj:utilcode:1.12.5",
            "easypermissions"         : "pub.devrel:easypermissions:1.0.1",
    ]
}

  1. 在项目的build.gradle中配置:
apply from: 'config.gradle'
  1. 在app的build.gradle中配置:
android {
    def android = rootProject.ext.android
    compileSdkVersion android.compileSdkVersion
    //compileSdkVersion android["compileSdkVersion"]   //这种写法也可
    buildToolsVersion android.buildToolsVersion
    defaultConfig {
        applicationId android.applicationId
        minSdkVersion android.minSdkVersion
        targetSdkVersion android.targetSdkVersion
        versionCode android.versionCode
        versionName android.versionName
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    def dependencies = rootProject.ext.dependencies
    implementation dependencies["constraint-layout"]
    implementation dependencies["appcompat-v7"]
    implementation dependencies["design"]
    //implementation dependencies.design  //这样写也可
}

三、模块开发

创建book的Android library,并在config.gradle中定义book模块是否为应用的开关:

ext {
    isBookApplication = true  //book模块开关,false:作为Lib组件存在, true:作为application存在
}

创建应用和依赖的AndroidManifest.xml

在这里插入图片描述

book模块的build.gradle:

if (rootProject.ext.isBookApplication) {//应用
    apply plugin: 'com.android.application'
} else {//依赖
    apply plugin: 'com.android.library'
}

android {
    def android = rootProject.ext.android
    compileSdkVersion android["compileSdkVersion"]
    buildToolsVersion android.buildToolsVersion
    defaultConfig {
		//应用需要 applicationId
        if (rootProject.ext.isBookApplication) {
            applicationId "com.example.book"
        }
        minSdkVersion android.minSdkVersion
        targetSdkVersion android.targetSdkVersion
        versionCode android.versionCode
        versionName android.versionName
    }

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

	//模块与应用的启动判断:应用需要启动
    sourceSets {
        main {
            if (rootProject.ext.isBookApplication) {
                manifest.srcFile 'src/main/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/module/AndroidManifest.xml'
            }
            jniLibs.srcDirs = ['libs']
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    def dependencies = rootProject.ext.dependencies
    implementation dependencies["appcompat-v7"]
}

app模块的build.gradle:

dependencies {
    if (!rootProject.ext.isBookApplication) {//book模块为应用时,不能依赖
        implementation project(':book')
    }
}

我们可以在config.gradle中的isBookApplication字段进行切换应用还是依赖

当为true时,我们可以单独运行book:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值