ABIs [armeabi, mips] 不支持 Android NDK 平台。

11

我的项目中使用了 JNI 代码,并且像下面这样使用了 abiFilters

Translated text:

我的项目中使用了 JNI 代码,并且像下面这样使用了 abiFilters

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.intel.hellojni"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
        ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:+'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

在一个系统中运行良好,但将代码移动到另一个系统后,出现以下导入错误。我已经检查了新创建的项目,它也显示相同的错误。

在一个系统中运行良好,但将代码移动到其他系统后,出现导入错误。我已经检查了新创建的项目,出现相同的错误。

ABIs [armeabi, mips] are not supported for platform. Supported ABIs are [armeabi-v7a, arm64-v8a, x86, x86_64].

Build command failed.
Error while executing process F:\sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {-HC:\Users\Intel\Downloads\TestJNI\app -BC:\Users\Intel\Downloads\TestJNI\app\.externalNativeBuild\cmake\debug\armeabi -DANDROID_ABI=armeabi -DANDROID_PLATFORM=android-15 -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=C:\Users\Intel\Downloads\TestJNI\app\build\intermediates\cmake\debug\obj\armeabi -DCMAKE_BUILD_TYPE=Debug -DANDROID_NDK=F:\sdk\ndk-bundle -DCMAKE_CXX_FLAGS= -DCMAKE_TOOLCHAIN_FILE=F:\sdk\ndk-bundle\build\cmake\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM=F:\sdk\cmake\3.6.4111459\bin\ninja.exe -GAndroid Gradle - Ninja}
 (include)   CMakeLists.txt 
Open File
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
如果我像下面这样删除 armeabimips,那么它就能正常工作。

如果我像下面这样删除armeabimips,那么它就能正常工作。

ndk {
       abiFilters "armeabi-v7a", "x86"
}

我已经为Android Studio安装了CMake和NDK。


3
这是有意为之的。从NDK r17发布说明中可以看到:“已删除对ARMv5(armeabi)、MIPS和MIPS64的支持。尝试构建这些ABI将导致错误。” - Michael
MIPS和MIPS64的Android设备几乎不存在。而仅支持armeabi但不支持armeabi-v7a的Android设备在2010年左右就已经停止出现了。 - Michael
@Michael,仅使用abiFilters“armeabi-v7a”,“x86”是否安全? - MJM
3
目前是这样的。但是,从2019年8月开始,提供32位ABI本地库(armeabi-v7a、x86)的应用程序将需要同时提供相应的64位ABI库(arm64-v8a、x86_64)。 - Michael
尽管直到2019年才需要,但64位ABI通常比32位的表现更好。 - Dan Albert
4个回答

8
正如消息所说,这些ABI已不再受NDK支持。这在NDK r17 changelog中有提到:

不再支持ARMv5(armeabi),MIPS和MIPS64。尝试构建任何这些ABI都将导致错误。

正如其他人所说,针对这些ABI的目标设备数量并不多。

3

在您的build.gradle文件中,从abiFilters中删除'armebi'。NDK不再支持armebi,正确的列表可能是:

ndk {
  abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}

1

NDK不再支持armeabi架构。请从build gradle中删除armeabi或替换为支持的ABI,例如'x86'。


0
在Windows 10上使用Android Studio 4.1.1时出现了同样的问题。在build.gradle中更改版本可以解决此问题,例如: 从 classpath "com.android.tools.build:gradle:4.1.1"classpath "com.android.tools.build:gradle:4.0.0"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接