La configuration de l'ensemble gradle (a)

annuaire

  • grammaire gradle
  • projet détaillé de déploiement

grammaire gradle

Environnement de développement studio Android 3.4.1

5.1.1 version gradle

Qu'est-ce que gradle

lRHp7Q.md.png

Gradle par écrit Android Studio

Écrivez les fichiers suivants dans le projet principal de gradle du module:
lR7znS.md.png

Vous entrez les informations suivantes dans le journal de la console:
Insérer ici l'image Description

gradle unifié code de configuration multi-modules

exercice gradle

Préparation: Créer un projet d'application, ce qui rend le projet contient des modules d'applications et modules bibliothèque.
Exigences: unifie les différents modules sont en configuration commune la création d' un nouveau fichier gradle.

étapes:

Dans le répertoire racine du projet, le nouveau fichier de configuration nommé config.gradle, et dans le répertoire racine du projet, l'introduction du profil.
Insérer ici l'image Description

test:

propriétés Declare en config.gradle le nom d'utilisateur. Et le module gradle lirary utilisations attribut nom d'utilisateur, compiler le projet, voir les informations du journal de sortie.

config.gradle文件内容如下:
    //添加多个自定义属性,可以使用ext代码块
    ext{
        username = "zfc"
    }

lirarymodule下的build.gradle内容如下:
    ...
    println "${username}"
    rootProject.ext.username = 1234
    println "${rootProject.ext.username}"
    ...

Compilez le projet se présente comme suit:
Insérer ici l'image Description

Extraction configuration unifiée
//声明变量
isRelease = true

//打印变量的值
print isRelease 

//定义字典
androidId=[
    compileSdkVersion:29,
    buildToolsVersion:"29.0.2",
    applicationId:"com.canjun.components",
    minSdkVersion:22,
    targetSdkVersion:29,
    versionCode:1,
    versionName:"1.0"
]

appId = [
        "app":"com.canjun.components",
        "order":"com.canjun.components.order",
        "personal":"com.canjun.components.personal"
]

url = [
        debug: "https://10.1.1.1/debug/rest",
        release: "https://10.1.1.1/release/rest",
]

supportLirary = "28.0.1"

dependencies = [
        appcompat:'androidx.appcompat:appcompat:1.1.0',
        constraintlayout:'androidx.constraintlayout:constraintlayout:1.1.3'
]
Utilisation de la configuration unifiée config.gradle
apply plugin: 'com.android.application'

def androidId = rootProject.ext.androidId
def appId = rootProject.ext.appId
def support = rootProject.ext.dependencies

android {
    compileSdkVersion androidId.compileSdkVersion
    buildToolsVersion androidId.buildToolsVersion
    defaultConfig {
        applicationId appId.app
        minSdkVersion androidId.minSdkVersion
        targetSdkVersion androidId.targetSdkVersion
        versionCode androidId.versionCode
        versionName androidId.versionName
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    ...
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
//    implementation 'androidx.appcompat:appcompat:1.1.0'
//    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

//    HashMap<String,String> map = new HashMap<>()

    support.each{ k,v-> implementation v}

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
jeu d'attributs constant à la buildconfig de classe
buildConfigFiled("String","debug","\"${url.debug}\"")

apply plugin: 'com.android.application'
...
def url = rootProject.ext.url
...
android {
    ...
    buildTypes {
        debug{ buildConfigField("String","debug","\"${url.debug}\"")
        }
        release {
            buildConfigField("String","debug","\"${url.release}\"")
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

Résultats: champ de débogage généré dans le module principal répertoire buildconfig (App)

Andrews configuration projet commun gradle

android{
    defaultConfig{
        ...
        ...
        //开启分包
        multiDexEnable true
        //设置分包配置
        multiDexKeepFile file('multidex-config.txt')
        
        //使用svg生成指定纬度的png图片
        vectorDrawbles.generatedDensities('xhdpi','xxhdpi')
        //使用v7包兼容(5.0以上版本)
        vectorDrawbles.useSupportLibrary = true
        //只保留指定和默认资源
        resConfig("zh-rCN")
        //ndk 默认保留架构
        ndk{
            abiFilters("armeabi","armeabi-v7a")
        }
        
        //设置源集属性
        sourceSets{
            main{
                if(!isRelease){
                    manifest.srcFile ['src/main/AndroidManifest.xml']
                    java.srcDirs ['src/main/java']
                    res.srcDirs ['src/main/res']
                    resources.srcDirs ['src/main/resources']
                    aidl.srcDirs ['src/main/aidl']
                    assets.srcDirs ['src/main/assets']
                }else{
                    mainfest.srcFile 'src/main/AndroidManifest.xml'
                }
            }
        }
     
    }
    
    //signingConfigs 的定义一定要放在buildTypes的前面
    signingConfigs{
        debug{
            storeFile file('xxx/xxxx/.android/debug.keystore')
            storePassword 'android'
            keyAlias 'androiddebugkey'
            keyPassword 'android'
        }
        release{
             // 签名证书文件
            storeFile file('D:/NetEase/netease.jks')
            // 签名证书的类型
            storeType "netease"
            // 签名证书文件的密码
            storePassword "net163"
            // 签名证书中密钥别名
            keyAlias "netease"
            // 签名证书中该密钥的密码
            keyPassword "net163"
            // 是否开启V2打包
            v2SigningEnabled true
        }
    }
    
    buildTypes{
        debug{
            signingConfig.debug   
        }
        
        release{
            signingConfig.release
            ...
        }
    }
    
    
}

//对adb配置
adbOptions{
    //操作超时时间为5秒
    timeOutInMs = 5 * 1000_0
    
    //adb install选项配置i
    installOptions '-r','-s'
}

// 对 dx 操作的配置,接受一个 DexOptions 类型的闭包,配置由 DexOptions 提供
dexOptions {
    // 配置执行 dx 命令是为其分配的最大堆内存
    javaMaxHeapSize "4g"
    // 配置是否预执行 dex Libraries 工程,开启后会提高增量构建速度,不过会影响 clean 构建的速度,默认 true
    preDexLibraries = false
    // 配置是否开启 jumbo 模式,代码方法是超过 65535 需要强制开启才能构建成功
    jumboMode true
    // 配置 Gradle 运行 dx 命令时使用的线程数量
    threadCount 8
    // 配置multidex参数
    additionalParameters = [
            '--multi-dex', // 多dex分包
            '--set-max-idx-number=50000', // 每个包内方法数上限
            // '--main-dex-list=' + '/multidex-config.txt', // 打包到主classes.dex的文件列表
            '--minimal-main-dex'
    ]
}
// 执行 gradle lint 命令即可运行 lint 检查,默认生成的报告在 outputs/lint-results.html 中
lintOptions {
    // 遇到 lint 检查错误会终止构建,一般设置为 false
    abortOnError false
    // 将警告当作错误来处理(老版本:warningAsErros)
    warningsAsErrors false
    // 检查新 API
    check 'NewApi'
}

projet détaillé de déploiement

Insérer ici l'image Description

Composants d'importance

Insérer ici l'image Description

différence PhoneModule et Android Libray

PhoneModule存在的配置:

apply plugin: 'com.android.application'
applicationId "com.canjun.components"

AndroidLibrary存在的配置:
apply plugin: 'com.android.library'
applicationId "com.canjun.components"(x)

L'intégration et le composant

L'intégration est un projet, seul un module principal, d'autres modules pour Lirary, ces bibliothèques ne fonctionnera pas seul. Ils doivent fonctionner ensemble et devenir une application du module maître

des moyens projet qu 'un composant du module respectif peuvent être exécutées séparément.

Intégrée pour la production, l'assemblage et de test pour le développement d'un multi-étages, les caractéristiques de très découplés en faveur du développement et de test.

Les composants de la configuration du projet

Insérer ici l'image Description

  1. modifier la configuration du module principal gradle

     apply plugin: 'com.android.application'
     def androidId = rootProject.ext.androidId
     def appId = rootProject.ext.appId
     def url = rootProject.ext.url
     def support = rootProject.ext.dependencies
     def isRelease = rootProject.ext.isRelease
     
     android {
         compileSdkVersion androidId.compileSdkVersion
         buildToolsVersion androidId.buildToolsVersion
         defaultConfig {
             applicationId appId.app
             minSdkVersion androidId.minSdkVersion
             targetSdkVersion androidId.targetSdkVersion
             versionCode androidId.versionCode
             versionName androidId.versionName
             testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
             buildConfigField("boolean","isRelease",String.valueOf(isRelease))
     //        multiDexEnable true
         }
         buildTypes {
             debug{
                 buildConfigField("String","debug","\"${url.debug}\"")
             }
             release {
                 buildConfigField("String","debug","\"${url.release}\"")
                 minifyEnabled false
                 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
             }
         }
     }
     
     dependencies {
         implementation fileTree(dir: 'libs', include: ['*.jar'])
         ...
         support.each{ k,v-> implementation v}
         implementation project(":common")
     
         //主模块不能依赖主模块
         if(isRelease){
             implementation project(":order")
             implementation project(":personal")
         }
         ...
     }
    
  2. modification de configuration du module bibliothèque gradle

     // 要点一
     if(isRelease){
         apply plugin: 'com.android.library'
     }else {
         apply plugin: 'com.android.application'
     }
     
     def androidId = rootProject.ext.androidId
     def appId = rootProject.ext.appId
     def support = rootProject.ext.dependencies
     
     android {
         compileSdkVersion androidId.compileSdkVersion
         buildToolsVersion androidId.buildToolsVersion
         defaultConfig {
             minSdkVersion androidId.minSdkVersion
             // 要点二
             if(!isRelease){
                 applicationId appId.order
             }
     
             targetSdkVersion androidId.targetSdkVersion
             versionCode androidId.versionCode
             versionName androidId.versionName
     
             testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
             consumerProguardFiles 'consumer-rules.pro'
         }
     
         buildTypes {
             release {
                 minifyEnabled false
                 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
             }
         }
     
     }
     dependencies {
         implementation fileTree(dir: 'libs', include: ['*.jar'])
     
         support.each{ k,v -> implementation v}
     
         implementation project(":common")
     
         testImplementation 'junit:junit:4.12'
         androidTestImplementation 'androidx.test.ext:junit:1.1.1'
         androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
     }
    

3. Effet spectacle

effets centralisés montrent:

Insérer ici l'image Description

effets composants montrent:

Insérer ici l'image Description

assemblage temporaire du développement de code, lorsque l'emballage centralisé dynamiquement isolé

Depuis le développement du composant, écrire un code de moduel localisé de la réponse, mais le code, mais ne gère pas, la valeur par défaut sera emballé dans le module principal. Comme indiqué ci-dessous:

lWD1vq.md.png

Par conséquent nécessiter un traitement spécial à:

  1. Configuration gradle, l'isolement de code

Insérer ici l'image Description

  1. Le code de localisation est stockée en fonction de la configuration gradle

Insérer ici l'image Description

3. Vérifier

lWDNaF.md.png

Publié 98 articles originaux · a gagné les éloges 6 · vues 20000 +

Je suppose que tu aimes

Origine blog.csdn.net/dirksmaller/article/details/103911553
conseillé
Classement