1、插件定義必須添加包名,否則會(huì)報(bào)錯(cuò)
Build file 'E:\AndroidStudioProjects\ASMLifecycleDemo\app\build.gradle' line: 11
A problem occurred evaluating project ':app'.
> Could not find implementation class 'com.afang.plugin.LifeCyclePlugin' for plugin 'afang.asm.lifecycle' specified in jar:file:/C:/Users/my/.gradle/caches/jars-8/o_82d058dae19bf77676dda51858f50f00/asm_lifecycle_plugin-1.0.0.jar!/META-INF/gradle-plugins/afang.asm.lifecycle.properties.
插件module asm_lifecycle_plugin的build.gradle配置
plugins {
id 'java-library'
id 'groovy'
id 'maven'
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//gradle相關(guān)的api依賴
implementation(gradleApi())
implementation(localGroovy())
//用于調(diào)用Android相關(guān)api 例如transform
implementation 'com.android.tools.build:gradle:4.1.3'
}
//插件group信息
group='com.afang.lifecycle.plugin'
//插件version 信息
version='1.0.0'
uploadArchives{
repositories {
mavenDeployer{
repository(url:uri('../asm_lifecycle_repo'))
}
}
}
//這里包名必須指定,否則會(huì)報(bào)錯(cuò)上邊的錯(cuò)誤
package com.afang.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
public class LifeCyclePlugin implements Plugin<Project>{
@Override
void apply(Project project) {
System.out.println("==LifecyclePlugin gradle plugin==")
}
}
2、認(rèn)清plugins{}和apply plugin:的區(qū)別
當(dāng)自定義的插件在使用plugins{}時(shí)報(bào)錯(cuò)內(nèi)容如下:
Plugin [id: 'afang.asm.lifecycle'] was not found in any of the following sources:
plugins{}塊這種方式引入的插件來自Gradle官方插件庫(kù);
如果使用buildscript {}塊指定第三方庫(kù)作為Gradle插件的話,指定插件就需要使用apply plugin了。
而plugins是新的用法,apply plugin是老用法,但是老用法感覺更靈活些
插件的使用module app的build.gradle配置
plugins {
id 'com.android.application'
id 'kotlin-android'
//這里報(bào)錯(cuò) Plugin [id: 'afang.asm.lifecycle'] was not found in any of the following sources:
//id 'afang.asm.lifecycle'
}
//正確寫法
apply plugin:'afang.asm.lifecycle'
項(xiàng)目project的build.gradle配置
buildscript {
ext.kotlin_version = "1.4.32"
repositories {
google()
jcenter()
//使用
maven { url '/asm_lifecycle_repo' }
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.3"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
//group+module+version
classpath 'com.afang.lifecycle.plugin:asm_lifecycle_plugin:1.0.0'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
項(xiàng)目目錄結(jié)構(gòu)
自定義插件的步驟
1、定義插件實(shí)現(xiàn)implements Plugin<Project>接口
//這里包名必須指定,否則會(huì)報(bào)錯(cuò)找不到插件
package com.xxx.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
public class XxxPlugin implements Plugin<Project>{
@Override
void apply(Project project) {
System.out.println("==LifecyclePlugin gradle plugin==")
}
}
2、在 " src/main " 目錄下 , 創(chuàng)建 " resources\META-INF\gradle-plugins " 目錄 , 在該目錄下創(chuàng)建 "xxx.aaa.bbb.properties " 配置文件(xxx.aaa.bbb未插件id) , 內(nèi)容為 :
implementation-class=com.xxx.plugin.XxxPlugin
//
參考gradle插件定義
參考2
升級(jí)gradle7.0 Plugin with id 'maven' not found
對(duì)字節(jié)碼不熟悉可以查看字節(jié)碼編程ASM之idea插件asm bytecode outline的使用
3、xxx contains custom BuildConfig fields, but the feature is disabled
Build Type 'release' contains custom BuildConfig fields, but the feature is disabled.
To enable the feature, add the following to your module-level build.gradle:
`android.buildFeatures.buildConfig true`
導(dǎo)致報(bào)錯(cuò)的配置
buildTypes {
release {
isMinifyEnabled = false
//這里導(dǎo)致的報(bào)錯(cuò)
buildConfigField( "String", "url", "https://www.baidu.com")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
這個(gè)報(bào)錯(cuò)是自定義 buildConfig配置的 buildConfigField導(dǎo)致的問題 ,解決方法
- 在
Project下的gradle.properties中增加配置android.defaults.buildfeatures.buildconfig=true ,當(dāng)前方法配置不推薦,因?yàn)樵?.9.0這個(gè)全局配置過時(shí) - 按照google給出的提示
module-level build.gradle: android.buildFeatures.buildConfig true在自定義了buildConfig的module下的build.gradle增加配置如下,完美解決
buildFeatures {
buildConfig = true
}