gradle(1)-기초

7519 단어

gradle 프로그래밍 프레임워크의 구성:groovy 핵심 문법,build script block,gradle api.


gradle의 라이프 사이클:


->1.Initialization 초기화 단계(진짜 프로젝트의 모든 프로젝트를 분석하고 모든 프로젝트에 대응하는 프로젝트 대상을 구축)->2.Configuration 설정 단계(모든 프로젝트 대상의task 분석, 모든task 토폴로지 구축)->3.Execution 실행 단계(특정 task 및 종속 task 실행)

gradle 실행 프로세스 스니핑:


/**
  • 설정 단계 시작 전 감청 리셋/this.beforeEvaluate {}/*
  • 구성 단계 완료 후 콜백/this.afterEvaluate {}/*
  • gradle 실행 완료 후 감청/this.gradle.buildFinished {}//두 번째 그룹 감청/*는 before Evaluate/this와 같습니다.gradle.before Project {}/*는 afterEvaluate와 같습니다.완료된 감청도buildFinised*/this를 통해gradle.afterProject {}

  • gradle Project 상세 정보:


    프로젝트는gradle 구축 프로그램의 입구입니다.gradle에 대해 말하자면 프로젝트와module,lib 라이브러리 등은 모두 하나의 프로젝트이고 모든 프로젝트는build가 있습니다.gradle 파일.build만 있습니다.gradle 파일의 폴더가 프로젝트입니다.루트 프로젝트의 프로젝트 역할은 하위 프로젝트를 관리하는 것이다. 루트 프로젝트의 dependencies는 프로젝트build의 의존(groovy 코드)을 플러그인으로 도입하여 하위 프로젝트에서 호출할 수 있다. 하위 프로젝트의 dependencies가 도입한 자신의 프로젝트 코드에서 사용하는 제3자 라이브러리(java 코드) 하위 프로젝트의 역할은 하위 프로젝트가 출력에 대응하는 것이다.안드로이드에서 모듈의 대응은 app를 출력하는 것이고lib의 대응은 aar의 생성입니다.java 프로젝트의 모든 프로젝트는 각jar 패키지의 생성에 대응합니다.사이트 프로젝트의 프로젝트가 Warr를 출력합니다.

    프로젝트api의 구성은gadlew생명주기api,프로젝트관련api,task관련api,속성관련api,file관련api와 기타api를 포함한다.


    1.>프로젝트 관련api: 현재 프로젝트가 부모 프로젝트를 조작하고 하위 프로젝트를 관리하는 능력을 가지게 합니다.2.>task 관련api: 현재 프로젝트에task를 추가하고 현재 프로젝트에 있는task를 사용하는 능력을 사용합니다.3. > 속성 관련api: 프로젝트 자체의gradle은 일부 속성을 제공합니다. 속성api는 프로젝트에 추가 속성을 추가할 수 있는 능력을 가지고 있습니다.4.>프로젝트 아래 file 관련api: 프로젝트 아래 file 관련api는 현재 프로젝트 아래 파일을 조작하는 데 사용됩니다.5.>gradle 성명 주기의api: 감청 등 조작을 위해 리셋을 제공합니다.6.>기타api: 예를 들어 프로젝트에 의존을 추가하고 설정을 추가하며 외부 파일을 어떻게 도입하는지 등등.모든 프로젝트에build이 포함되어 있습니다.gradle 파일,build.gradle 파일은 프로젝트 바이트로 컴파일됩니다.그래서build.gradle 파일은build에 있는 프로젝트 클래스에 해당합니다.gradle에서 코드를 쓰는 것은 프로젝트 클래스에서 코드를 쓰는 것과 같다.

    프로젝트 방법 설명:


    // 하위 프로젝트 가져오기


    this.getSubprojects().eachWithIndex { Project entry, int i ->
    println("----getSubprojects:project----- ': ${entry.name}'")
    

    }

    // 모든 프로젝트 가져오기


    this.getAllprojects()

    // 부모 프로젝트 가져오기


    this.getParent().name//name 속성 가져오기 프로젝트name

    // 루트 프로젝트 가져오기


    this.getRootProject()/**
  • 현재 노드 프로젝트와 모든 하위 프로젝트를 구성합니다./allprojects {group'com.hexindai.com'//공통 방법 버젼 설정 1.0.0-release'//공통 방법 리포지토리 설정 {Google() jcenter()}/*
  • 현재 노드 공사는 포함되지 않고 하위 공사만 포함됩니다.
  • 모든 글자 프로젝트가 필요하지 않으면 단독gradle을 만들 수 있습니다. 누가 누구apply를 사용해서 호출할 수 있습니다./projects {//maven 창고에 업로드하면 apk는 maven에 업로드할 필요가 없습니다//라이브러리 프로젝트if(project.plugins.hasPlugin('com.android.library')) {apply from:'./publishToMaven.gradle'}/*
  • 프로젝트api, 루트 프로젝트에 서브 프로젝트를 설정하지만 모듈화하여 각자의 일을 할 필요가 없습니다./project('app'){Project project-> apply plugin: 'com.android.application' group 'com.hexindai.hxd' version '1.0.0.0' android { compileSdkVersion 26 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } defaultConfig { applicationId "com.oahcil.lichao.duyaxing"minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.0.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.android.support:design:26.0.0' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' testCompile 'junit:junit:4.12' compile 'com.jakewharton:butterknife:8.4.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' compile 'com.apkfuns.logutils:library:1.4.2' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' compile 'com.squareup.okhttp3:logging-interceptor:3.0.0-RC1' compile 'io.reactivex.rxjava2:rxjava:2.0.7' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0' compile 'com.trello.rxlifecycle2:rxlifecycle:2.0.1' compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.0.1' compile 'com.jiongbull:jlog:1.0.5' compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.3@aar' } }*/

  • 프로젝트 등록 정보:


    1:DEFAULT_BUILD_FILE='build.gradle'//기본적으로 모든 프로젝트의 생성 파일은build입니다.gradle 2:PATH_SEPARATOR=":"//경로 구분자는 ":"이고 일반 경로 구분자는 "3:DEFAULT 와 구별됨BUILD_DIR_NAME= "build"//기본 모든 출력 파일의 폴더는build 4:GRADLEPROPERTIES = "gradle.properties"//기본gradle의 프로필은gradle입니다.properties

    프로젝트 확장 속성:


    1.->


    /**
  • build.gradle에는 많은 모호한 int,string버전과 같은 라이브러리를 인용하는 경로와 버전이 존재하여 읽을 수 없고 관리가 잘 되지 않습니다.
  • 그래서 우리는 루트 프로젝트에서 모든 하위 프로젝트를 설정할 수 있습니다.물론 어떤 하위 프로젝트가 단독으로 사용한 경우
  • 하위 프로젝트에서 변수를 단독으로 정의하거나 확장 속성을 설정하는 방식입니다.
  • 루트 프로젝트에 확장 속성을 설정합니다.
  • 이 방식의 단점은 다음과 같다. 이 설정은 최종적으로 모든 하위 프로젝트에서 한쪽을 설정할 것이다. */subprojects{ ext{ complieSdkVersion=26 libAndroidDesign='com.android.support:design:26.0.0' } }

  • 2.>


    /**
  • 진급 방식, 루트 프로젝트에서 ext 확장 속성을 직접 설정
  • 호출 시 루트 프로젝트(this.rootProject.complieSdkVersion)를 지정할 수 있음
  • this를 직접 호출할 수도 있습니다.complieSdkVersion(상속 때문에)*/ext{complieSdkVersion=26 libAndroidDesign='com.android.support:디자인:26.0'}
  • 3.>


    /**
  • 궁극적인 방식.루트 디렉터리에 통용되는common을 만듭니다.gradle,apply를 통해 */ext {android=[compileSdkVersion: 26, buildToolsVersion:'260.0', 응용 프로그램 Id:'com.hexinda.hxd', targetSdkVersion: 26, version Code: 1, version Name:'1.0.0', multixEnabled:true, manifestPlaceholders:'com.hexinda.hxd',hxroid=', hxroid='s: h/hrid=[com. android=[comapply 도입 android=[compappily 도입 도입 및 [compaply를 도입 도입//com and and and andword':'liwswswws','keyAlias':'lich','keyPassword':'hexindaiwswswswws']그리고 루트 프로젝트에: apply from:this를 도입합니다.file('common.gradle'),그리고 모든 하위 프로젝트에android {compileSdkVersion rootProject.ext.android.complieSdkVersion defaultConfig{ applicationId rootProject.ext.android.applicationId minSdkVersion rootProject.ext.android.compileSdkVersion targetSdkVersion rootProject.ext.android.targetSdkVersion versionCode rootProject.ext.android.versionCode versionName rootProject.ext.android.versionName testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"multiDexEnabled rootProject.ext.android.multiDexEnabled } signingConfigs { release { storeFile file(rootProject.ext.android.signConfigs.storeFile) storePassword rootProject.ext.android.signConfigs.storePassword keyAlias rootProject.ext.android.signConfigs.keyAlias keyPassword rootProject.ext.android.signConfigs.keyPassword } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }

  • }

    좋은 웹페이지 즐겨찾기