Gradleの詳細とマルチチャネルパッケージ

8210 ワード

いくつかの悟りでしょう
2015年の7月からAndroidに接触してちょうど2年になりました.2年は長くて短いです.技術は絶えず更新されているので、プログラマーの私たちも絶えず勉強しなければならない.そうしないと、すぐに淘汰されるだろう.久しぶりにブログを更新して、主にやはり仕事が忙しくて、996のリズムの仕事も耐えられません.週末に時間を割いてGradleという知識点をまとめましょう.
Gradle使用の詳細
1.gradle構築システムの目標
  • リソースの再利用をより容易にする
  • により、複数のapkパブリケーションバージョンでも、同じアプリケーションの異なるカスタムバージョンでも、同じアプリケーションの異なるバージョンの作成が容易になります.
  • は、構築プロセスを構成、拡張、カスタマイズしやすくします.

  • 2.いくつかの役に立つGradleコマンド-./gradlew-vバージョン番号-./gradlew clean app/ディレクトリのbuildフォルダをクリア-./gradlew check依存性のチェック-./gradlew build依存性をチェックしてパッケージをコンパイルし、debug、release環境のパッケージをすべて書き出します-./gradlew assembleDebugコンパイルしてDebugパッケージを打つ-./gradlew assembleReleaseコンパイルしてReleaseのパッケージを打つ-./gradlew–stopコンパイルを停止
    3.gradleファイルの詳細
    (1)主工事のbuild.gradleファイル
      buildscript {
         repositories {
           jcenter()
         }
         dependencies {
           classpath 'com.android.tools.build:gradle:1.3.0'
         }
      }
    
      allprojects {
         repositories {
           jcenter()//      
           maven{url MAVEN_URL}//       maven  
         }
      }
      project.ext.set("android_support_version", "25.3.1")
      project.ext.set("junit_version", "4.12")
      project.ext.set("compileSdkVersion", "25")
      project.ext.set("buildToolsVersion", "25.0.2")
    

    (2)gradle.properties(グローバルプロファイル)#バックグラウンドプロセス構築org.gradle.daemon=true org.gradle.jvmargs=-Xmx1536m org.gradle.parallel=true
    #  maven    
    MAVEN_URL= http://xxx.xx.1.147:8081/nexus/content/repositories/thirdparty/
    
    COMPILE_SDK_VERSION=25
    BUILD_TOOLS_VERSION=25.0.2
    MIN_SDK_VERSION=15
    TARGET_SDK_VERSION=23
    ANDROID_SUPPORT_VERSION=25.3.1
    
    
    VERSION_CODE=31405
    VERSION_NAME=3.1.4.05
    

    (3)app/build.gradle(module)
    //         Android  ,    Android          
    //   moudle       apply plugin:'com.android.library' 
    apply plugin: 'com.android.application'
    //              
    apply plugin: 'com.google.gms.google-services'  
    
    allprojects {
       repositories {
          jcenter()
       }
    }
    repositories {
       flatDir {
           //   library  aar  
           dirs project(':network_api').file('aars')
        }
       maven { url 'https://maven.fabric.io/public' }
       mavenCentral()
    }
    
    //android  :       
    android {
      //  SDK   ,        ,          
      compileSdkVersion Integer.parseInt(project.COMPILE_SDK_VERSION)
      //       ,      aapt 
      buildToolsVersion project.BUILD_TOOLS_VERSION
    
      //  Android Studio PNG        
      aaptOptions.cruncherEnabled = false  
      aaptOptions.useNewCruncher = false  
    
      //     
      defaultConfig {
         applicationId "com.webull.liujian.webull_tv_show"
         //           
         minSdkVersion project.MIN_SDK_VERSION
         //>=23   6.0    
         targetSdkVersion project.TARGET_SDK_VERSION
         versionCode Integer.parseInt(project.VERSION_CODE)
         versionName project.VERSION_NAME
         //     65535     dex  
         multiDexEnabled true
         //Android Test
         testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
         //   
         resConfigs "en", "zh-rCN", "zh-rTW", "de", "fr", "hi"
      }
    
      //      ,    ./gradlew assembleRelease    release  
      signingConfigs{
         debug{
           // No config
         }
         release{
             storeFile file("../tv.keystore.jks")
             storePassword "liujian"
             keyAlias "liujian"
             keyPassword "liujian"
         }
      }
    
      //     ,Android Plugin                 debug release  。
     //                          ,  APK    。
     //buildTypes    debug release   
      buildTypes {
        debug{
            //debug        .debug              debug release   apk。
            applicationIdSuffix ".debug"
            //  log
            buildConfigField "boolean","LOG_DEBUG","true"
            //           
            versionNameSuffix "-debug"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
            signingConfig signingConfigs.debug
        }
    
        release {
            //buildConfigField        ,         ,       
            //     BuildConfig.LOG_DEBUG      
            buildConfigField "boolean","LOG_DEBUG","false"
            zipAlignEnabled true  //zipAlign  
            shrinkResources true  //         
            minifyEnabled true  //    
            //         proguard-rules.pro
            proguardFiles 'proguard.cfg'
            signingConfig signingConfigs.release
        }
      }
    
      //             ,        ,     
      productFlavors {
        home {
            manifestPlaceholders = [ CHANNEL:”0"]
            minSdkVersion 21
        }
        abroad {
            manifestPlaceholders = [ CHANNEL:”1"]
            minSdkVersion 14
        }
      }
    
      //           ,      
      sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            //      theme         color  style,  res/theme   
            res.srcDirs = ['res','res/theme',]
            assets.srcDirs = ['assets']
            // src    jniLibs   ,  so  
            jniLibs.srcDirs = ['libs']
        }
        //          tests   (src     )
        instrumentTest.setRoot('tests')
        androidTest.setRoot('tests')
        //      
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
      }
    
      lintOptions{
         //build release        lint   
         checkReleaseBuilds true
         //lint   error     
         abortOnError false
      } 
    
      //multiDex       ,               
      dexOptions {
         preDexLibraries = false
         //     Lib preDexing
         incremental true
         //  incremental dexing,      ,    android studio      。
         javaMaxHeapSize "4g"     //  java     ,         OOM  
     }
    }
    
    dependencies {
       def android_support_version = project.ANDROID_SUPPORT_VERSION
       //       libs    jar   
       compile fileTree(include: ['*.jar'], dir: 'libs')
       //     
       compile project(':network_api')
       compile "com.android.support:appcompat-v7:$android_support_version"
       compile "com.android.support:gridlayout-v7:$android_support_version"
       compile "com.android.support:recyclerview-v7:$android_support_version"
       compile "com.android.support:design:$android_support_version"
       compile 'io.reactivex:rxandroid:1.2.1'
       compile 'com.squareup.retrofit2:retrofit:2.1.0'
       compile 'com.squareup.retrofit2:converter-gson:2.0.0'
       compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
       compile 'com.android.support:appcompat-v7:24.0.0'
       compile project(':MPChartLib')
       compile 'com.github.PhilJay:MPAndroidChart-Realm:v1.1.0@aar'
       compile(name:'camerascan-1.0', ext:'aar')
     }
    

    マルチチャネルパッケージ:
    gradleファイルのカスタムproductFlavors:
    //             ,        ,     
      productFlavors {
        home {
          manifestPlaceholders = [ CHANNEL:”0"]
          minSdkVersion 21
       }
       abroad {
          manifestPlaceholders = [ CHANNEL:”1"]
          minSdkVersion 14
       }
     }
    

    AndroidManifest.xml :
       
       

    このマルチチャネルパッケージ方式の利点は便利で簡単で、欠点は時間がかかることです.
    Aarファイル##
    (0)aarファイルの役割aarはjarパッケージの利点に比べて:リソースファイルを含めて再コンパイルする必要がなく、コンパイル速度を速める
    (1)aarファイルを生成するMouduleプロジェクトのコンパイル後に自動的にaarパッケージが生成され、パッケージのパスはMoudule->build->outputs->aarディレクトリ(2)使用①aarパッケージをlibsディレクトリにコピーする②buildを構成する.gradleファイルrepositories{flatDir{dirs‘libs’}
         dependencies{
           compile(name:'camerascan-1.0', ext:'aar')
         }