繁体   English   中英

Android使用NDK我得到了Android NDK:中止错误

[英]Android for using NDK i get Android NDK: Aborting error

在我当前的项目中,我尝试使用用C语言编写的简单文件,从android studio安装NDKCMakeLLDB ,我当前的ndk路径是:

ndk.dir=/Users/mahdi/Desktop/Home/Packages/AndroidSdk/ndk-bundle

gradle.properties内容

android.useDeprecatedNdk=true

的build.gradle:

defaultConfig {
    applicationId "ir.pishguy.myapp"
    minSdkVersion 17
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
    vectorDrawables.useSupportLibrary = true

    ndk{
        moduleName "web_service_encryption"
        ldLibs "log", "z", "m"
        abiFilters "armeabi", "armeabi-v7a", "x86"
    }
}

现在,当我尝试制作和安装应用程序时,出现以下错误:

错误:(115)*** Android NDK:正在终止。 停止。 错误:任务':app:compileDebugNdk'的执行失败。 com.android.ide.common.process.ProcessException:执行进程/ Users / mahdi / Desktop / Home / Packages / AndroidSdk / ndk-bundle / ndk-build并带有参数{NDK_PROJECT_PATH = null APP_BUILD_SCRIPT = / Users / mahdi / Desktop /Home/Projects/Android/myapp/app/build/intermediates/ndk/debug/Android.mk APP_PLATFORM = android-25 NDK_OUT = / Users / mahdi / Desktop / Home / Projects / Android / myapp / app / build / intermediates / ndk / debug / obj NDK_LIBS_OUT = / Users / mahdi / Desktop / Home / Projects / Android / myapp / app / build / intermediates / ndk / debug / lib APP_ABI = armeabi-v7a,armeabi,x86}

jni文件夹中的c文件:

#include<string.h>
#include<jni.h>
#include<android/log.h>

//  LOGI("hello") ?? LOGI("money %d",15)
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native", __VA_ARGS__))
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native", __VA_ARGS__))

const char key[] = "~yfj(e^m1)o@2pc!"; //16???
int len = 0;


unsigned char getByteNumber(unsigned char first, unsigned char end) {
    int firstPosition = 0, endPosition = 0;
    int position = 0;
    for (; position < 16; position++) {
        if (key[position] == first) {
            firstPosition = position;
        }
        if (key[position] == end) {
            endPosition = position;
        }
    }
    return (firstPosition << 4) | (endPosition);
}


void encrypt(unsigned char p[], unsigned char res[]) {
    int i = 0;
    for (; i < len; i++) {
        res[2 * i] = key[p[i] / 16];
        res[2 * i + 1] = key[p[i] % 16];
    }
}


void decrypt(unsigned char p[], char res[]) {
    int i;
    for (i = 0; i < len; i++) {
        res[i] = getByteNumber(p[i * 2], p[i * 2 + 1]);
    }
}

jstring Java_ir_pishguy_myapp_EncryptUtil_encrypt(JNIEnv *env, jclass this,
        jbyteArray src) {
    unsigned char *buff = (char*) (*env)->GetByteArrayElements(env, src, NULL);
    len = (*env)->GetArrayLength(env, src);
    unsigned char res[len * 2];
    encrypt(buff, res);
    res[len * 2] = '\0';
    (*env)->ReleaseByteArrayElements(env, src, buff, 0);
    jstring resStr = (*env)->NewStringUTF(env, res);
    return resStr;
}

jstring Java_ir_pishguy_myapp_EncryptUtil_decrypt(JNIEnv *env, jclass this,
        jbyteArray src) {
    unsigned char *buff = (char*) (*env)->GetByteArrayElements(env, src, NULL);
    len = (*env)->GetArrayLength(env, src);
    len = len / 2;
    signed char res[len];
    decrypt(buff, res);
    res[len] = '\0';
    (*env)->ReleaseByteArrayElements(env, src, buff, 0);
    jstring resStr = (*env)->NewStringUTF(env, res);
    return resStr;
}

APP_PLATFORM =机器人-25

看来useDeprecatedNdk路径是错误的。 25是您的targetSdkVersion ,而不是您的minSdkVersion (NDK目标需要匹配您的最小目标)。 弃用不推荐使用的东西,并使用externalNativeBuild

您看到的构建问题是因为NDK中没有android-25之类的东西(我们只有在平台上实际上有新的本机API可以节省尺寸)。

即使您解决了这个问题(通过将目标改为24),也将在24之前的版本上遇到运行时问题。您的NDK目标必须为17才能匹配minSdkVersion

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM