问题:
今天编译开源谷歌输入的时NDK时报错,AndroidStudio升级到最新3.4.1, Gradle5.1.1,NDK Cmake3.6.4
编译运行项目报错
cannot initialize a parameter of type 'jboolean *' (aka 'unsigned char *') with an rvalue of type 'bool'
错误源码:
const char *jstringTocharArray(JNIEnv *env, jstring str) {
return env->GetStringChars(str,false);
}
const char* GetStringUTFChars(jstring string, jboolean* isCopy)
原因:
新版的jni规范更加严格,需要使用内置的bool属性常量,改成JNI_FALSE
之后这个错误消失了。
修改后源码:即可
char16 *fixed_ptr = (char16*)(*env).GetStringChars(fixed_str, JNI_FALSE);
补充:
当然还出现了这个问题:也是jni规范
warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘__time_t’ [-Wformat=]
printf("time %u:%u\n",tv.tv_sec,tv.tv_usec);warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 3 has type ‘__suseconds_t’ [-Wformat=]
解决方案:
在对应项目的jni/Application.mk添加一句话
APP_CFLAGS += -Wno-error=format-security
意思就是忽视这个error
扫描二维码关注公众号,回复:
8637215 查看本文章