简书链接:jni开发排查错误warningconversionfromstringliteraltocharisdeprec
文章字数:223,阅读全文大约需要1分钟

image.png

1
expression of type 'int' is always false [-Wtautological-constant-out-of-range-compare]
1
2
deprecated [-Wc++11-compat-deprecated-writable-strings]
char *keyWords = "<U+60C5><U+8FC1>";

其实这些错误都是警告。解决问题的关键在下面这些关键信息,首先编译之后无法通过是因为一个错误导致,28 warnings and 1 error generated.
所以这里只需要关注错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
F:\src\git_project\qqrepacket_pro\insertqqmodule\src\main\cpp\hlkq.cpp:2100:190: error: cannot initialize a member subobject of type 'const char *' with an rvalue of type 'void *'
{"callUniversal" "(ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z", (void *) callUniversal},
^~~~~~~~~~~~~~~~~~~~~~
28 warnings and 1 error generated.
ninja: build stopped: subcommand failed.

at com.android.build.gradle.tasks.ExternalNativeBuildTaskUtils.executeBuildProcessAndLogError(ExternalNativeBuildTaskUtils.java:302)
at com.android.build.gradle.tasks.ExternalNativeBuildTask.executeProcessBatch(ExternalNativeBuildTask.java:292)
at com.android.build.gradle.tasks.ExternalNativeBuildTask.build(ExternalNativeBuildTask.java:184)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
... 42 more

image.png

那么错误是

1
2
error: cannot initialize a member subobject of type 'const char *' with an rvalue of type 'void *'
{"callUniversal" "(ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z", (void *) callUniversal},

定位2100行。发现少些了1个,导致

1
{"callUniversal" ,  "(ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z", (void *) callUniversal},