android stduio gradleパラメータ構成説明

11308 ワード

主に白掃盲と個人の強固な学習に用いられる.
以下はプロジェクトのbuildです.gradleでよく使われる構成パラメータには、基本的に注釈が含まれている意味があります.次に、それらを分解します.
//       library  
apply plugin: 'com.android.library'

//       
final Properties properties = new Properties()
InputStream inputStream = project.rootProject.file('local.properties').newDataInputStream()
properties.load(inputStream)

android {

    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.appVersionCode
        versionName rootProject.ext.appVersionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        buildConfigField 'String', 'LOGIN_URL', 'API_BASE_URL + "/page/toLogin"'
        buildConfigField 'String', 'API_BASE_URL', '"http://127.0.0.1:12206/"' 
        buildConfigField 'String', 'UMENT_CHANNEL', '"DEV"'

                //        key=chennelList  
                buildConfigField 'String', 'CHENNEL_LIST_JSON_STRING', '"' + properties.getProperty('chennelList', '') + '"'


                //        
        ndk {
            abiFilters "armeabi"
            abiFilters "armeabi-v7a"
            abiFilters "x86"
        }
    }

    //    
    buildTypes {
        //    
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField 'String', 'API_BASE_URL', '"https://xxxx.com"' 
            buildConfigField 'String', 'UMENT_CHANNEL', '"release"'
        }
          //    
        mem555 {
            initWith debug
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField 'String', 'API_BASE_URL', '"https://xxxx.com"' 
            buildConfigField 'String', 'UMENT_CHANNEL', '"MEM"'
        }
        //             
                <.....>
    }
    //       
    lintOptions {
        abortOnError false
    }
}
//   
dependencies {
    //       
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    //      ,    jar  com.android.support  
    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support'
    })
    //    
    annotationProcessor rootProject.ext.lombokProcess 
        //          aspectjrt:1.8.9     API
        compile 'org.aspectj:aspectjrt:1.8.9'
    //                model     
    api project(':model')
    //                fastjson:1.2.46  
    api 'com.alibaba:fastjson:1.2.46'
}
//    task      ,                  
task initChennel() {
    println '       '
    StringBuffer sb = new StringBuffer()
    def chennellist = android.buildTypes
    chennellist.each { chennel ->
        def paramMap = chennel.buildConfigFields
        paramMap.each {
            sb.append("${it.key},${it.value.value.replace("\"","")}|")
        }
    }
    sb = new StringBuffer(sb.substring(0,sb.length() - 1))
    File file = project.rootProject.file('local.properties')
    Writer w = new FileWriter(file)
    properties.put("chennelList", sb.toString())
    println sb.toString()
    properties.store(w, "conments")
    println '       '
}
//  UnitTest task    
tasks.whenTaskAdded { task ->
    if (task.name.contains('UnitTest')) {
        task.enabled = false
    }
}

一般的には、構成項目は以下の閉パッケージで構成されていますが、私たちの例では、android{}に書かれていない部分が見られます.なぜですか.どんな違いがありますか.一般的にAndroid閉パッケージの外に書かれているものはgrovvyのtaskや他のコードクリップです.
たとえば、このプロファイルでは、key-value方式で格納されたパラメータファイルをロードします.その後のandroid{}では、このファイル内のいくつかのものを使用することができます.使用方法はproperties.getProperty('chennelList', '')で、最初のパラメータはkeyを表し、2番目はデフォルト値を表します.また、いくつかのgrovyコードを書いて、いくつかのコンパイル時のタスクを実行することもできます.例えば、task initChennel() {}ここでgradleをコンパイルするときに私のtaskを追加して、現在のすべてのチャネルを獲得し、最後にプロファイルに書き込み、android{properties.getProperty('chennelList', '')}を構成するときに理想的な値を与えることができます.
//       library  
apply plugin: 'com.android.library'

//       
final Properties properties = new Properties()
InputStream inputStream = project.rootProject.file('local.properties').newDataInputStream()
properties.load(inputStream)
android{
...
}
//    task      ,                  
task initChennel() {

}
//  UnitTest task    
tasks.whenTaskAdded { task ->

}

buildConfigField
buildConfigField 'String', 'UMENT_CHANNEL', '"DEV"'

この主な役割は、プロジェクトがコンパイルされるとデフォルトでBuildConfigファイルが生成され、このコードが追加すると、BuildConfigが生成されると、クラス内に静的定数値が作成することを意味し、ここでは3つのパラメータ1が必要である.データ型2.属性名3.属性値
public static final String UMENT_CHANNEL = "DEV";

私たちのプロジェクトが大きい場合、多くのモジュールに分けて作業することがありますが、各モジュールエンジニアリングにはプライベートなbuildがあります.gradle構成情報は、このときにバージョンを統一しようとすると面倒になりますが、次から次へと変更するのは不便ですが、どうすればいいのでしょうか.ここにいるよgradleではこう書きました
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

私のところのこれらのバージョンの情報は公共の場所に置いてあり、すべてのサブプロジェクトが彼にアクセスして統一的に管理することができます.では、どのように使用しますか?プロジェクトのルートパスの下にbuildがあります.gradleファイル、その次男プロジェクトにはプライベートなbuildがあります.gradleファイルは、ルートディレクトリのbuild.gradleで作成すればいいです.以下を見て、みんなは少し考えて理解することができて、このような方式は更に多くの妙用があって、みんなは自分で発掘することができます
ext {
    defaultPublishConfig = project.hasProperty('buildType') ? project.property('buildType') : 'debug'
    buildToolsVersion = '27.0.1'
    compileSdkVersion = 27
    targetSdkVersion = 27 
    appVersionCode = 13
    appVersionName = '1.0.13'
}