夥計們,沒有JNI_OnLoad發現逃課的init>應用程序關閉
我在Android應用程序,我需要一個第三方.so庫工作。我內置 這個第三方庫(與NDK建造),按照他們的指示,然後尋找 包括在我的Android項目這個。所以。
因此,我遵循docs/PREBUILTS.html中描述的步驟,並在jni/prebuilt目錄中成功構建了 新的.so。現在我嘗試在一個簡單的測試android應用程序中使用.so設施。所以,我做的是:
static {
Log.i("load so > ","load so");
System.loadLibrary("xyz");
}
/* The native functions */
private static native int openFile(String filename);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try{
String path = getPathForDownloadDirectoryFile();
Log.i("file path> ", path);
int num= openFile(path);
}catch(Exception e){
Log.e(">", "could not open the file");
}
}
現在,當我跑我的應用程序,我得到一個調試消息說: 沒有JNI_OnLoad在/data/data/com.example.myfirstapp/lib/xyz.so 0x411e6738發現,跳繩init ,然後關閉應用程序。
對於更多信息,下面是錯誤日誌:
No JNI_OnLoad found in /data/data/com.example.mysecondapp/lib/xyz.so 0x411e67a0, skipping init
W/dalvikvm( 570): No implementation found for native Lcom/example/mysecondapp/MainActivity;.openFile:(Ljava/lang/String;)I
D/AndroidRuntime( 570): Shutting down VM
W/dalvikvm( 570): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
E/AndroidRuntime( 570): FATAL EXCEPTION: main
E/AndroidRuntime( 570): java.lang.UnsatisfiedLinkError: Native method not found: com.example.mysecondapp.MainActivity.openFile:(Ljava/lang/String;)I
E/AndroidRuntime( 570): at com.example.mysecondapp.MainActivity.openFile(Native Method)
E/AndroidRuntime( 570): at com.example.mysecondapp.MainActivity.onCreate(MainActivity.java:31)
E/AndroidRuntime( 570): at android.app.Activity.performCreate(Activity.java:5008)
E/AndroidRuntime( 570): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
E/AndroidRuntime( 570): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
E/AndroidRuntime( 570): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
E/AndroidRuntime( 570): at android.app.ActivityThread.access$600(ActivityThread.java:130)
E/AndroidRuntime( 570): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
E/AndroidRuntime( 570): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 570): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 570): at android.app.ActivityThread.main(ActivityThread.java:4745)
E/AndroidRuntime( 570): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 570): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 570): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
E/AndroidRuntime( 570): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime( 570): at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( 146): Force finishing activity com.example.mysecondapp/.MainActivity
至於我能看到的是中openFile機實現()方法未能找到,但同樣xyz.so LIB工作相當整潔與原來自第三方的示例應用程序。我幾乎是Android-ndk世界的入門者。
Java的Android的NDK忍者..any想什麼我可能會丟失? 我非常欣賞這裏的任何幫助:)
對!包名可能是原因!讓我試用適當的包裝。我們會盡快回復你,謝謝! –
我用新的包裝結構構建.so,這是我自己的,但現在我在安裝設備上的apk時出現Failure [INSTALL_FAILED_MISSING_SHARED_LIBRARY]錯誤,儘管xyz.so存在於Project_folder/libs/arm_folder下。任何想法可能背後是什麼? –
粘貼你的make文件,並嘗試運行鏈接中給出的例子,你會得到一些清晰。 –