[英]Android for using NDK i get Android NDK: Aborting error
在我当前的项目中,我尝试使用用C
语言编写的简单文件,从android studio安装NDK
, CMake
, LLDB
,我当前的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.