将.so文件和jar包装程序包含到Android项目中

3

我已经在Stack Overflow和Google上搜索了过去的两天,寻找解决我的问题的方法,但是我没有找到任何能够解决我的问题的东西。

我正在尝试包含一个带有.jar包装器的.so库,以用于.so中的本地函数。当我用winrar解压缩jar文件时,我可以看到它只包含.class文件-这正常吗?

我正在使用Eclipse并创建了一个新项目,并将.so文件添加到libs/armeabi文件夹中,并将.jar添加到我的项目中。enter image description here

我已经设置了属性,以便本地库位置设置为libs/armeabi文件夹。

我还删除了构建选项,以自动刷新构建时的资源和资产文件夹以及当外部JAR包含本地库时强制错误,尽管我认为第二个不是我目前的错误。

我正在使用此代码尝试将程序加载到手机上。

public class MainActivity extends Activity {
    static {
        Log.w("MYAPP", "About to load library.");
        System.loadLibrary("libjdns_sd");
        Log.w("MYAPP", "Library loaded.");
    } 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

该库应通过静态块加载。
然而,我的LogCat显示以下输出:
11-30 18:13:47.830: W/MYAPP(9158): About to load library.
11-30 18:13:47.830: W/dalvikvm(9158): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/example/bonjourapple/MainActivity;
11-30 18:13:47.830: W/dalvikvm(9158): Class init failed in newInstance call (Lcom/example/bonjourapple/MainActivity;)
11-30 18:13:47.830: D/AndroidRuntime(9158): Shutting down VM
11-30 18:13:47.830: W/dalvikvm(9158): threadid=1: thread exiting with uncaught exception (group=0x41949898)
11-30 18:13:47.830: E/AndroidRuntime(9158): FATAL EXCEPTION: main
11-30 18:13:47.830: E/AndroidRuntime(9158): java.lang.UnsatisfiedLinkError: Couldn't load libjdns_sd from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.example.bonjourapple-2.apk,libraryPath=/data/app-lib/com.example.bonjourapple-2]: findLibrary returned null
11-30 18:13:47.830: E/AndroidRuntime(9158):     at java.lang.Runtime.loadLibrary(Runtime.java:355)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at java.lang.System.loadLibrary(System.java:525)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at com.example.bonjourapple.MainActivity.<clinit>(MainActivity.java:11)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at java.lang.Class.newInstanceImpl(Native Method)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at java.lang.Class.newInstance(Class.java:1130)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2210)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at android.app.ActivityThread.access$700(ActivityThread.java:159)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at android.os.Looper.loop(Looper.java:137)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at android.app.ActivityThread.main(ActivityThread.java:5419)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at java.lang.reflect.Method.invokeNative(Native Method)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at java.lang.reflect.Method.invoke(Method.java:525)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
11-30 18:13:47.830: E/AndroidRuntime(9158):     at dalvik.system.NativeStart.main(Native Method)

为什么库没有被加载?我做错了什么? 如果有人能指点我方向,我将非常感激。
1个回答

3

原来我所要做的就是将 .jar 文件放在通常的 libs 文件夹中,并将 .so 文件放入 libs/armeabi-v7a 中。然后我就能够加载本地库并访问其功能。


那对我完全奏效了。谢谢,非常感谢。就像真的,非常非常感谢! - Sagar Hatekar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接