我想编译一个开源的android项目(Netguard)使用gradel (gradlew清洁构建)但我遇到了这个错误:
A problem occurred configuring project ':app'.
> Exception thrown while executing model rule: NdkComponentModelPlugin.Rules#cre
ateToolchains
> No toolchains found in the NDK toolchains folder for ABI with prefix: llvm
我搜索了一下,但没有发现任何有用的东西。这是主要的build.gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.6.0-alpha1'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
这是构造。应用项目的Gradle:
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "eu.faircode.netguard"
minSdkVersion.apiLevel = 21
targetSdkVersion.apiLevel = 23
versionCode = 2016011801
versionName = "0.76"
archivesBaseName = "NetGuard-v$versionName-$versionCode"
}
}
android.ndk {
moduleName = "netguard"
toolchain = "clang"
ldLibs.add("log")
}
android.sources {
main {
jni {
source {
srcDir "src/main/jni/netguard"
}
exportedHeaders {
}
}
}
}
android.buildTypes {
release {
minifyEnabled = true
proguardFiles.add(file('proguard-rules.pro'))
ndk.with {
debuggable = true
}
}
}
android.buildTypes {
debug {
ndk.with {
debuggable = true
}
}
}
android.productFlavors {
create("all") {
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.1.+'
compile 'com.android.support:recyclerview-v7:23.1.+'
compile 'com.squareup.picasso:picasso:2.5.+'
}
我使用gradle-2.9-all和android-ndk-r10e。我不知道我是否应该提到其他东西,所以如果你需要任何信息,请评论。
错误信息:
在前缀为:llvm的ABI的NDK toolchains文件夹中没有找到工具链。
在使用NDK重新安装Android Studio后,我从GitHub导入了一个使用NDK的Android代码示例,并尝试编译它。
结果有一个错误:
在前缀为:llvm的ABI的NDK toolchains文件夹中没有找到工具链
解决方案:
由于某些原因,macOS上的标准安装过程未能安装完整的一套:
~/Library/Android/sdk/ndk-bundle丢失了所有工具的文件夹工具链,
(它应该是这样的:~/Library/Android/sdk/ndk-bundle/toolchains)
解决方案是单独下载NDK,打开它,复制文件夹工具链并粘贴到文件夹:
~/Library/Android/sdk/ndk-bundle
我也遇到过类似的问题,但由于项目需求,我想使用NDK r9d版本。
在当地。属性:路径设置为ndk。dir=C\:\\Android\\ndk\\ Android -ndk-r9d但这导致了一个问题:
在前缀为[toolchain-name]的ABI的NDK toolchains文件夹中没有找到工具链
解决方案是:
使用sdk管理器安装最新的NDK
将缺失的工具链[toolchain-name]从新的ndk复制到旧的ndk。在我的例子中,从sdk\ndk-bundle\工具链到\ndk\android-ndk-r9d\工具链
重复该过程,直到所有所需的工具链都存在
在我看来,复制的工具链没有被使用,但出于某种原因,它们需要在那里。
两年过去了,现在如果你路过这里,你可能会遇到这样的错误信息:
在前缀为mips64el-linux-android的ABI的NDK toolchains文件夹中没有找到工具链
or
在前缀为mipsel-linux-android的ABI的NDK toolchains文件夹中没有找到工具链
最新的NDK删除了对mips abi的支持,早期版本的android gradle插件仍然会检查mips工具链的存在。更多信息请看这里。
解决方案:升级android gradle插件到3.1或更新版本。
例如,在项目级别gradle中添加以下内容[2018年9月28日- 9月]
classpath "com.android.tools.build:gradle:3.2.0"
解决方法:创建mipsel-linux-android文件夹结构来欺骗工具。最简单的方法是符号链接到aarch64-linux-android-4.9。
# on Mac
cd ~/Library/Android/sdk/ndk-bundle/toolchains
ln -s aarch64-linux-android-4.9 mips64el-linux-android
ln -s arm-linux-androideabi-4.9 mipsel-linux-android
检查这个线程的三个选项来解决这类问题
android / gradle / gradle-wrapper开放。属性并更改这一行:
distributionUrl =
https\://services.gradle.org/distributions/gradle-4.1-all.zip
到这一行:
distributionUrl =
https\://services.gradle.org/distributions/gradle-4.4-all.zip
android /构建开放。Gradle并更改这一行:
classpath 'com.android.tools.build:gradle:3.0.1'
:
classpath 'com.android.tools.build:gradle:3.1.2'
像我一样解决它
Android工作室
文件>项目结构并转到项目
将Gradle版本更改为4.6
&
Android插件版本到3.2.1
检查屏幕截图
然后清理项目,如果你得到这个错误“无法找到aapt2- protoo .jar”
去建造。gradle(项目)
尝试移动谷歌()方法。Gradle文件)到其执行块的顶部
它搜索存储库的顺序导致了这个问题。
例如,修改如下:
repositories {
maven { url 'https://maven.fabric.io/public' }
google() <=== from here
mavenCentral()
}
:
repositories {
google() <=== to here
maven { url 'https://maven.fabric.io/public' }
mavenCentral()
}
在“buildscript”和“allprojects”中进行这些更改
检查屏幕截图
如果你没有找到谷歌(),添加它
[https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android][1]
对于尝试此示例并面临最新NDK问题的人。可以遵循这个解决方案。
在build.gradle
改变这一切
classpath 'com.android.tools.build:gradle:3.0.1'
To
classpath 'com.android.tools.build:gradle:3.1.2'
原因是最新的ndk版本已经弃用了mips, Gradle 3.1.2版本不会强制使用mips。它假定这些丢失的文件夹存在。
注意:这个答案似乎是特定的:在NDK toolchains文件夹中找不到ABI的工具链,前缀为:mips64el-linux-android,但它被链接到这里:
* https://stackoverflow.com/questions/52193274/no-toolchains-found-in-the-ndk-toolchains-folder-for-abi-with-prefix-mips64el-l
来自NDK r19b:
more ~/Android/Sdk/ndk-bundle/CHANGELOG.md
此版本的NDK与Android Gradle插件不兼容
3.0或更老版本。如果你看到一个错误
在前缀为mips64el-linux-android的NDK toolchains文件夹中没有找到工具链,
将项目文件更新到[使用插件3.1或更新版本]。你也会
需要升级到androidstudio3.1或更新版本。
链接文件不适合我。
ln -s aarch64-linux-android-4.9 mips64el-linux-android
ln -s arm-linux-androideabi-4.9 mipsel-linux-android
因为还有另一个错误。
* What went wrong:
A problem occurred configuring project ':Test'.
> Expected caller to ensure valid ABI: MIPS
如果使用gradde构建,则将此添加到defaultConfig中
ndk {
abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
如果您使用ndk-build命令,请在Application.mk中添加此命令。
APP_ABI := armeabi-v7a arm64-v8a x86 x86_64
要继续使用旧的gradle版本,我们可以使用以下解决方案:
注意文件android-ndk-r17-beta2/toolchains/mips64el-linux-android-
4.9 /预构建/ darwin-x86_64 / NOTICE-MIPS64。该文件的内容如下。
这个mips64el-linux-android-4.9目录的存在是为了使NDK与Android兼容
SDK的Gradle插件,3.0.1版本及更早版本,它期望使用NDK
拥有MIPS64工具链目录。
所以,我可以说,使用Android SDK的Gradle插件3.0.1以上,或者创建一个标有“mipsel”和“mips64el”的目录,都可以解决这个问题。后一种方法如下所示。
cd“path-to-ndk”
OS_=$(uname -s | tr [A-Z] [a-z])
mkdir -p toolchains/mipsel-linux-android-4.9/prebuilt/${OS_}-x86_64
touch toolchains/mipsel-linux-android-4.9/prebuilt/${OS_}-x86_64/NOTICE-MIPS
mkdir -p toolchains/mips64el-linux-android-4.9/prebuilt/${OS_}-x86_64
touch toolchains/mips64el-linux-android-4.9/prebuilt/${OS_}-x86_64/NOTICE-MIPS64
从这里得到解决方案