Gradle 플러그인 시작
12895 단어 groovy
사용자 정의Gradle Plugin
apply plugin: 'java'
apply plugin: 'groovy' // gradle library
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile gradleApi()
}
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
group='com.egos.gradle.plugins'
name='pluginsample'
version='0.0.1'
// groovy, .groovy
package com.egos.gradle.plugins;
class SamplePlugin implements Plugin<Project> {
protected final Logger log = Logging.getLogger(getClass());
void apply(Project project) {
println 'This is a sample plugin.'
}
}
resources/META-INF.gradle-plugins/com.egos.gradle.properties
.# com.egos.gradle。
implementation-class=com.egos.gradle.plugins. SamplePlugin
실행gradle uploadArchives
은 로컬 창고에 발표됩니다.apply plugin: 'maven'
group='com.egos.gradle.plugins'
name='pluginsample'
version='0.0.1'
uploadArchives {
repositories {
mavenDeployer {
repository(url: uri('../repo'))
}
}
}
This is a sample plugin.
출력을 볼 수 있습니다.buildscript {
repositories { //
// jcenter() // jcenter
maven { // maven 。
url uri('../repo')
}
}
dependencies {
classpath 'com.egos.gradle.plugins: pluginsample:0.0.1'
// jar ,
// classpath fileTree(dir:'../pluginsample/build/libs', include: ['*.jar']) }
}
apply plugin: 'com.egos.gradle'
// SamplePlugin apply 。
project.afterEvaluate {
// preDebugBuild , Action
project.tasks.getByName("preDebugBuild") {
it.doFirst {
println "preDebugBuild doFirst"
}
}
}
(2) 고급 방법을 정의한다.맨 앞에 소개된 Tinker는gradle을 사용하여 diff를 생성할 수 있다.마찬가지로 디버깅과 테스트가 편리합니다.Gradle Plugin 디버그
위에서 줄곧 디버깅 플러그인을 말하고 있는데, 플러그인은 어떻게 디버깅해야 합니까?이 질문은 자신을 괴롭혔습니다. 지금까지jar 패키지 경로를 통해 플러그인의 경로를 지정해 왔습니다. 매번 로그 정보를 출력해서 보고 방법을 찾았습니다(다음 참고로 Intellij/Android Studio 디버깅Gradle Plugin).여기에도 일부 내용을 쓰고, 다른 것은 위의 블로그를 참고할 수 있다.
buildscript { repositories { maven { // maven 。 url uri('../repo') }
}
dependencies { classpath 'com.egos.gradle.plugins: pluginsample:0.0.1' }
apply plugin: 'com.egos.gradle'
// terminal 。 gradlew assembleDebug , gradle assembleDebug
gradlew assembleDebug -Dorg.gradle.daemon=false -Dorg.gradle.debug=true
일반gradle 명령gradle tasks // task
gradle dependencies //
gradle assembleDebug // Debug
gradle :app:tasks // app(module ) module 。 。
gradle lint // lint
build.gradle 자주 사용하는 설정android{
sourceSets {
main { //
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
}
test { // java
java.srcDirs = ['test/java']
}
xxFlavor { // flavor ( Build Variant flavor flavor )
manifest.srcFile 'xxFlovar/AndroidManifest.xml'
java.srcDirs = ['xxFlovar/java']
res.srcDirs = ['xxFlovar/res']
}
}
android {
deft{} //
removeAd{} //
...etc
}
adroid {
signingConfigs {
config {
storeFile "key.store"
storePassword "key.store.password"
keyAlias "key.alias"
keyPassword "key.alias.password"
}
}
}
android {
buildTypes {
haha { // , haha, debug release
minifyEnabled true
}
debug {
signingConfig signingConfigs.config
}
release {
// Manifest
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng_xx"]
minifyEnabled true //
signingConfig signingConfigs.config //
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg' //
}
}
}
// Manifest , AndroidManifext.xml
"UMENG_CHANNEL"
android:value="umeng_${UMENG_CHANNEL_VALUE}"/> // manifestPlaceholders
android {
applicationVariants.all { variant -> }
}
android {
defaultConfig {
multiDexEnabled true // dex
}
lintOptions { // false,lint
abortOnError false
}
dexOptions {
incremental false
preDexLibraries = false
jumboMode = true
}
packagingOptions {
exclude 'META-INF/LICENSE.txt' //
exclude 'META-INF/NOTICE.txt'
}
ndk {
abiFilters 'armeabi' // ndk , arm so
}
}
컴파일 정보 구성gradle build 설정 정보.예: gradle build -xx -yy.실제로 사용할 때는 모형을 하나 만들어야 한다.gradle build-Pxx=xx - Py=yy - Pxx는 고정된 모델/build입니다.gradle에서 Properties()는 안의 속성, 프로젝트(org.gradle.api.Project, 하나의 프로젝트에 해당)에 해당합니다.android –defaultConfig – 아래에서buildConfigField 정보를 설정할 수 있습니다.
// build.gradle
// gradle build -Phaha=" "
Properties buildProperties = new Properties();
buildProperties.put("haha", " "); //
// haha
if(project.hasProperty("haha")){
buildProperties.put("haha",project.property("haha"))
}
android {
defaultConfig {
// BuildConfig 。
buildConfigField("String", "haha", "\"" +buildProperties.get("haha") + "\"")
}
}
사색2015 프로젝트 코드가 Eclipse에서 AS로 옮겨졌을 때를 떠올리면build.gradle은 매우 신비로운 것이다. 나중에 일부 플러그인을 접했고 자신도 몇 가지 (포장이 끝난 후에 지정한 폴더로 출력하는 등)를 썼다. 지금까지 원본 코드를 볼 때 많은 라이브러리에서groovy를 통해 자신의 플러그인을 썼다.build.gradle은 더 이상 신비로운 것이 아니다. 설정이 원래 많을수록 프로젝트가 커지면서 너무 비대해 보인다. (원본 파일이 아닐 수도 있고 항상 비대해 보일 수도 있다.)아마도 비교적 복잡한 임무들을build에서gradle에서 처리를 벗어나 플러그인으로 쓰는 것은 더 좋은 해결 방안으로 디버깅도 편리하고 복용도 편리하다.
문제.
사용자 정의Gradle 플러그인 Intellij/Android Studio 디버깅Gradle Plugin Android 공식 기술 문서 번역--Gradle 플러그인 사용자 안내서(7)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android Build.Gradle 설명 🌟Gradle은 Android 애플리케이션의 개발 단계를 자동화하는 빌드 시스템입니다. Gradle 시스템에서 Java 플랫폼용 코드를 작성하는 동안 우리는 매우 간단한 언어인 Groovy 프로그래밍 언어를 사용합니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.