而对于C语言,它是不支持函数重载的,若进行重载,在Android Studio下编译器就会报错,提示Duplicate declaration of function xxx:
那如果去掉extern "C",效果会怎样?
首先,编译器会很友好地提示你:
并建议你
如果不接受建议,效果会怎样?
那就是crash
Process: com.wsy.jnidemo, PID: 27921
java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String com.wsy.jnidemo.MainActivity.stringFromJNI()
(tried Java_com_wsy_jnidemo_MainActivity_stringFromJNI and
Java_com_wsy_jnidemo_MainActivity_stringFromJNI__)
at com.wsy.jnidemo.MainActivity.stringFromJNI(Native Method)
at com.wsy.jnidemo.MainActivity.onCreate(MainActivity.java:22)
at android.app.Activity.performCreate(Activity.java:7815)
at android.app.Activity.performCreate(Activity.java:7804)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1318)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3513)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2109)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
for (int i = 0; i < 100; i++) {
long start = System.nanoTime();
stringFromJNI();
long end = System.nanoTime();
Log.i(TAG, "onCreate: " + (end - start));
}