Android本机库中的奇怪错误
Android<4.3上的执行版本本机代码似乎存在错误 如何复制:在Android NDKAndroid本机库中的奇怪错误,android,android-ndk,Android,Android Ndk,Android
samples/hello jni
中获取样本,并将hello jni.c
中的代码替换为以下内容:
#include <string.h>
#include <jni.h>
#include <time.h>
static double g_now;
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
struct timespec ts;
ts.tv_sec = (unsigned int)3;
ts.tv_nsec = 0;
nanosleep(&ts, NULL);
double now = 12839123.0;
g_now = now;
while (1) {
struct timespec ts;
ts.tv_sec = (unsigned int)0;
ts.tv_nsec = 20000000;
nanosleep(&ts, NULL);
if (now != g_now)
return (*env)->NewStringUTF(env, "Shit happened");
}
return (*env)->NewStringUTF(env, "Hello from JNI");
并在释放中
cd jni
ndk-build NDK_DEBUG=0
cd ../
ant debug && adb install -r bin/HelloJni-debug.apk
我在Nexus5(Android4.4.4)上测试了它——在运行无限循环时,发布版和调试版都显示为黑屏
但在三星SII(安卓4.1.2)发布版上,突然出现了“狗屎发生”的字串。这意味着变量没有被修改就被更改了。这反过来意味着CPU上的一些寄存器被覆盖
是否有任何解决方法,或者是否存在已知的错误
我的运行配置:SDK 23.0.2(构建工具20)和ndk-r10-64,Mac OS 10.9.4
UPD1:看起来三星安卓4.1版左右的设备属于风险群体你试过了吗?我找不到任何类似我的问题。显然,这个错误在安卓4.4+中已经修复。
cd jni
ndk-build NDK_DEBUG=0
cd ../
ant debug && adb install -r bin/HelloJni-debug.apk