[fpc-pascal] Android JNI failing in Galaxy S4
Felipe Monteiro de Carvalho
felipemonteiro.carvalho at gmail.com
Tue May 21 17:47:10 CEST 2013
Hello,
I know that some other people here are developing Android JNI apps.
For me it has worked perfectly so far, but as we just got a Galaxy S4
in the office I thought of testing my app there and boom =( It crashes
at the startup:
I/True Democracy( 8624): Trying to load libtruedemocracy.so
D/dalvikvm( 8624): Trying to load lib
/data/app-lib/com.felipe.truedemocracy-1/libtruedemocracy.so
0x421fadc8
W/libc ( 8624): WARNING: generic atexit() called from legacy shared library
D/dalvikvm( 8624): Added shared lib
/data/app-lib/com.felipe.truedemocracy-1/libtruedemocracy.so
0x421fadc8
I/truedemocracy( 8624): JNI_OnLoad called
I/truedemocracy( 8624): Reading our Activity Class
E/dalvikvm( 8624): ERROR: couldn't find native method
E/dalvikvm( 8624): Requested:
Lcom/felipe/truedemocracy/TrueDemocracy;.GetHistoricalInflationCount:()I
F/truedemocracy( 8624): javaEnvRef^.RegisterNatives failed
I/truedemocracy( 8624): JNI_OnLoad finished
D/qdmemalloc( 217): ion: unmap_buffer base:0x0 size:8355840 offset:0 fd:49
D/qdmemalloc( 217): ion: unmap_buffer base:0x0 size:4096 offset:0 fd:78
D/qdmemalloc( 217): ion: unmap_buffer base:0x0 size:8355840 offset:0 fd:66
D/qdmemalloc( 217): ion: unmap_buffer base:0x0 size:4096 offset:0 fd:67
W/dalvikvm( 8624): No implementation found for native
Lcom/felipe/truedemocracy/TrueDemocracy;.Translations_TranslateToISO639_2_Code:(Ljava/lang/String;Ljava/lang/String;)V
D/AndroidRuntime( 8624): Shutting down VM
W/dalvikvm( 8624): threadid=1: thread exiting with uncaught exception
(group=0x410b8ac8)
D/Sensorhubs( 228): readContextData: 1, 1, 14, 1
D/SensorHubManager( 724): onGetSensorHubDataLocked: library = 1, 1, 14, 1
D/CAE ( 724): onGetSensorHubData(SensorHubParserProvider.java:66)
- onGetSensorHubData Event [event buffer len :4]
I/CAE ( 724): parse(SensorHubParserProvider.java:129) - buffer size = 4
I/CAE ( 724): parse(SensorHubParserProvider.java:140) - 1, 1, 14, 1,
D/qdoverlay( 217): Unset pipe=VG0 dpy=0; Unset pipe=VG1 dpy=0; Unset
pipe=RGB1 dpy=0;
D/CAE ( 724): display(ContextProvider.java:430) -
================= FLIP_COVER_ACTION =================
V/WindowManager( 724): Window{42b3a138 u0
Keyguard}mOrientationRequetedFromKeyguard=false
E/AndroidRuntime( 8624): FATAL EXCEPTION: main
E/AndroidRuntime( 8624): java.lang.UnsatisfiedLinkError: Native method
not found: com.felipe.truedemocracy.TrueDemocracy.Translations_TranslateToISO639_2_Code:(Ljava/lang/String;Ljava/lang/String;)V
E/AndroidRuntime( 8624): at
com.felipe.truedemocracy.TrueDemocracy.Translations_TranslateToISO639_2_Code(Native
Method)
E/AndroidRuntime( 8624): at
com.felipe.truedemocracy.TrueDemocracy.onCreate(TrueDemocracy.java:632)
E/AndroidRuntime( 8624): at
android.app.Activity.performCreate(Activity.java:5250)
E/AndroidRuntime( 8624): at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
E/AndroidRuntime( 8624): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2210)
E/AndroidRuntime( 8624): at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2296)
E/AndroidRuntime( 8624): at
android.app.ActivityThread.access$700(ActivityThread.java:151)
E/AndroidRuntime( 8624): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
E/AndroidRuntime( 8624): at
android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 8624): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 8624): at
android.app.ActivityThread.main(ActivityThread.java:5293)
E/AndroidRuntime( 8624): at
java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 8624): at
java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 8624): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
E/AndroidRuntime( 8624): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
E/AndroidRuntime( 8624): at dalvik.system.NativeStart.main(Native Method)
Any ideas?
I am not doing anything unusual, and exact same APK works fine in HTC
Wildfire, Xperia Mini, Galaxy Nexus, etc, etc.
=(
it runs JNI_onCreate to the end, so at least code is being executed.
The routine that it complains about is declared correctly:
procedure Java_com_felipe_truedemocracy_TrueDemocracy_Translations_TranslateToISO639_2_Code(
env:PJNIEnv; this:jobject; AISOCode, ACountry: jstring); cdecl;
And is correct in the structure:
(name:'Translations_TranslateToISO639_2_Code';
signature:'(Ljava/lang/String;Ljava/lang/String;)V';
fnPtr:@Java_com_felipe_truedemocracy_TrueDemocracy_Translations_TranslateToISO639_2_Code;),
And is correct in RegisterNative:
// Register Pascal exported calls
if javaEnvRef^^.RegisterNatives(javaEnvRef, javaActivityClass,
@NativeMethods[0],length(NativeMethods))<0 then
begin
__android_log_write(ANDROID_LOG_FATAL, 'truedemocracy',
'javaEnvRef^.RegisterNatives failed');
end;
My only idea at the moment is to do the static export too... maybe
that will work, lets see.
--
Felipe Monteiro de Carvalho
More information about the fpc-pascal
mailing list