【问题标题】:How to package native library in Android app?如何在 Android 应用中打包原生库?
【发布时间】:2011-06-14 17:07:40
【问题描述】:

我尝试在 Android 应用中包含使用本机代码的预构建库,但未成功。我不知道我做错了什么。

完成的 .apk 文件的内容如下所示。 (我正在使用 NetBeans 和 Ant 构建所有内容 - 如果有人需要,我可以包含 Ant 脚本的相关部分。)

META-INF
assets
libs >
    armeabi >
        libandroidgl20.so
        libgdx.so
res 
AndroidManifest.xml
classes.dex
resources.arsc

在应用程序代码中,我有:

static {
    System.loadLibrary("gdx");
    System.loadLibrary("androidgl20");
}

但我不断收到错误消息:java.lang.UnsatisfiedLinkError: Library gdx not found

我是否将 .so 文件放在正确的位置?我是否需要做任何其他事情来确保运行时知道它们?

【问题讨论】:

    标签: java android java-native-interface libgdx


    【解决方案1】:

    System.load() 需要共享对象的确切路径(包括全名)。这就是你做错了。

    请改用System.loadLibrary("gdx");

    【讨论】:

    • 这是正确的,但我仍然收到错误消息。所以除此之外它一定是别的东西。
    • 您能否验证这些库是否已放置在您的 /data/data/(package.name)/lib 目录中?
    • 知道了!这是两个错误的组合:如您所指出的,未使用 loadLibrary,并将目录命名为“libs”而不是“lib”。
    【解决方案2】:

    您确定满足“gdx”的所有依赖项吗?
    该库中是否有任何未实现的本机函数?

    【讨论】:

    • libgdx 发行版中只包含两个 .so 文件,而我拥有这两个文件 - 因此可以安全地假设所有依赖项都得到满足。
    • download.oracle.com/javase/1.4.2/docs/api/java/lang/… 这就是文档所说的。尝试使用 ldd(或类似的东西)并非常清楚依赖关系。还要检查是否所有的本机功能都实现了...
    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多