如何解决我在androidJNI C层中编写了一个字符串转换函数它可以在调试下正确运行当我将其压缩为APK文件时它无法运行
我在android JNI C层中编写了一个字符串转换函数。它可以在调试下正确运行。当我将其压缩为APK文件时。它无法运行。并报告错误,我不知道问题出在哪里。在JNI层没有混淆。当我不调用此函数时,apk可以正常运行。否则,此功能只能在调试模式下正常运行
char *ove(char *str,size_t len) {
char *start = str;
char *end = str + len - 1;
char ch;
if (str != NULL) {
while (start < end) {
ch = *start;
*start++ = *end;
*end-- = ch;
}
}
return str;
}
char test(char *msg) {
char letter[] = "ABCDEFGHIJ";
char number[] = "0123456789";
char *data = ove(msg,strlen(msg));
for (int i = 0; i < strlen(data); i++) {
char a = data[i];
for (int j = 0; j < strlen(letter); j++) {
char b = letter[j];
char c = number[j];
if (isalpha(a) != 0) {
if (strcmp(&a,&b) == 0) {
sprintf(cryptograph,"%s%s",cryptograph,&c);
break;
}
} else {
if (strcmp(&a,&c) == 0) {
sprintf(cryptograph,&b);
break;
}
}
}
}
LOGE("JNILOG_%s",cryptograph)
}
这是错误消息
#06 pc 00000000002ea530 /system/lib64/libart.so (art::JavaVMExt::LoadNativeLibrary(_JNIEnv*,std::__1::basic_string<char,std::__1::char_traits<char>,std::__1::allocator<char>> const&,_jobject*,std::__1::allocator<char>>*)+3192)
#43 pc 00000000003f0c24 /system/lib64/libart.so (art::Method_invoke(_JNIEnv*,_jobjectArray*)+52)
#51 pc 0000000000363748 /system/lib64/libart.so (art::JNI::CallStaticVoidMethodV(_JNIEnv*,_jclass*,_jmethodID*,std::__va_list)+652)
#52 pc 00000000000bd920 /system/lib64/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*,...)+116)
解决方法
正如我的评论中提到的那样,这段代码使C数组和字符混乱。
您至少需要更改以下内容:
-
strcmp(&a,&b) == 0
应该是a == b
-
sprintf(cryptograph,"%s%s",cryptograph,&c);
应该是sprintf(cryptograph,"%s%c",c);
或仅仅是cryptograph[i+x] = c;
(其中x是函数开头的密码长度)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。