Android gradle 将 android gradle 插件更新到 7.0 后出现自定义插件错误
Android gradle custom Plugin error after updating android gradle plugin to 7.0
以下是我的自定义插件代码
import com.android.annotations.NonNull;
import com.android.build.gradle.LibraryExtension;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
public class CustomPlugin implements Plugin<Project> {
@Override
public void apply(@NonNull Project project) {
project.getPluginManager().withPlugin("com.android.library", plugin -> {
//code here
});
}
}
将 android gradle 插件从 4.2.1 升级到 7.0 以上自定义插件代码显示 错误:包 com.android.annotations 不存在
如何解决这个错误?
在android gradle插件7.0中,推荐使用AndroidX Libraries。首先,在您的 gradle.properties 文件中,通过添加
启用 AndroidX
android.useAndroidX=true
还添加这些依赖项(以设置其他 androidx 库),
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
同步您的 gradle 文件,然后将导入 com.android.annotations.NonNull
更改为 androidx.annotations.NonNull
因为我和 alphanso 在同一个项目工作,并从他那里接手了 AGP 升级,所以这是我最终发现的:
代码位于我们项目的 .buildSrc
目录中,并使用 Gradle 插件 java-library
和 java-gradle-plugin
.
在那里编译
因此 android.useAndroidX=true
没有效果,因为这仅在您使用 Android 插件时有效,com.android.library
或 com.android.application
。
类 突然丢失的根本原因(我们在 com.android.build
的子包中也丢失了其他一些)在其他地方:
随着 AGP 7.0,com.android.tools.build:gradle
的大多数库依赖项从“编译时间”更改为“运行 时间”,您可以在此处看到:
AGP 4.2.2:
https://mvnrepository.com/artifact/com.android.tools.build/gradle/4.2.2
AGP 7.0:
https://mvnrepository.com/artifact/com.android.tools.build/gradle/7.0.0
这意味着切换到 AGP 时 7.x 您必须手动添加缺少的依赖项。
在我们的例子中添加
implementation "com.android.tools:common:30.0.3"
解决了问题。
以下是我的自定义插件代码
import com.android.annotations.NonNull;
import com.android.build.gradle.LibraryExtension;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
public class CustomPlugin implements Plugin<Project> {
@Override
public void apply(@NonNull Project project) {
project.getPluginManager().withPlugin("com.android.library", plugin -> {
//code here
});
}
}
将 android gradle 插件从 4.2.1 升级到 7.0 以上自定义插件代码显示 错误:包 com.android.annotations 不存在
如何解决这个错误?
在android gradle插件7.0中,推荐使用AndroidX Libraries。首先,在您的 gradle.properties 文件中,通过添加
启用 AndroidXandroid.useAndroidX=true
还添加这些依赖项(以设置其他 androidx 库),
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
同步您的 gradle 文件,然后将导入 com.android.annotations.NonNull
更改为 androidx.annotations.NonNull
因为我和 alphanso 在同一个项目工作,并从他那里接手了 AGP 升级,所以这是我最终发现的:
代码位于我们项目的 .buildSrc
目录中,并使用 Gradle 插件 java-library
和 java-gradle-plugin
.
因此 android.useAndroidX=true
没有效果,因为这仅在您使用 Android 插件时有效,com.android.library
或 com.android.application
。
类 突然丢失的根本原因(我们在 com.android.build
的子包中也丢失了其他一些)在其他地方:
随着 AGP 7.0,com.android.tools.build:gradle
的大多数库依赖项从“编译时间”更改为“运行 时间”,您可以在此处看到:
AGP 4.2.2: https://mvnrepository.com/artifact/com.android.tools.build/gradle/4.2.2
AGP 7.0: https://mvnrepository.com/artifact/com.android.tools.build/gradle/7.0.0
这意味着切换到 AGP 时 7.x 您必须手动添加缺少的依赖项。
在我们的例子中添加
implementation "com.android.tools:common:30.0.3"
解决了问题。