在下载了某开源 demo 项目之后,编译过程提示错误如下:
Error:Execution failed for task ':compileDebugRenderscript'.
> com/android/jill/api/ConfigNotSupportedException
在遇到问题之后肯定是先分析问题描述,再进行搜索,针对性的解决问题。
经过上述两步,发现网上答案混杂不一:
有说明 sdk 版本不对的:
下载源项目 sdk 之后并未解决问题
有说明 gradle 插件版本不对的:
更新插件版本也尝试,错误依然;
还有说明 gradle 配置不对的:
需要在'gradle.properties'文件中添加如下一行代码:
// org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
然而都没有解决。
在搜索过程中发现,抛出这个错误的源码位置: ConfigNotSupportedException.java
其中这么描述产生当前异常的原因:
/**
* Thrown when the requested Jack configuration for a given API version is not supported.
*/
简单翻译就是需要的功能,当前 API 不能给予就会抛出此异常。
这个错误提示很笼统,当前 Android 项目依赖的东西太多,库文件,gradle 版本,sdk 版本...
突然想到,仓库配置是否完整。
在项目 build.gradle
文件中,代码如下:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
可以看到,当前项目只配置了 jcenter
仓库,如果依赖 google 的库文件,就会出现当前异常,在 添加构建依赖
界面有介绍如何添加第三方依赖库:
allprojects {
repositories {
maven {
url " https://repo.example.com/maven2 "
}
maven {
url "file://local/repo/"
}
ivy {
url " https://repo.example.com/ivy "
}
}
}
同时也介绍了如果添加 google 仓库:
allprojects {
repositories {
google()
// If you're using a version of Gradle lower than 4.1, you must instead use:
// maven {
// url ' https://maven.google.com '
// }
// An alternative URL is ' https://dl.google.com/dl/android/maven2/ '
}
}
当在 top-level build.gradle
文件中添加如下仓库之后,编译成功。
buildscript {
repositories {
jcenter()
maven { url ' http://repo1.maven.org/maven2 ' }
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven { url ' http://repo1.maven.org/maven2 ' }
google()
}
}
还是老话,Android 更新比较快,官方文档还是需要花时间好好研读的。
对于各种依赖也需下功夫分析,各个版本区别在哪,更新了什么都要清楚。