gpt4 book ai didi

android - DalvikVM 上的 CLI 在 JNI 库上失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:57 24 4
gpt4 key购买 nike

我需要在 Android 上运行 java 应用程序的命令行版本(是的,我知道这并不简单)。

我正在尝试使用 Dalvikvm 启动它,它确实启动了,但稍后我的代码失败了,因为它开始使用 android.util.log 并抛出此异常。

java.lang.UnsatisfiedLinkError: println_native
at android.util.Log.println_native(Native Method)
at android.util.Log.i(Log.java:159)
at org.slf4j.impl.AndroidLogger.info(AndroidLogger.java:151)
at org.gihon.client.TunnelingClient.<init>(TunnelingClient.java:62)
at org.gihon.client.CLI.main(CLI.java:95)
at dalvik.system.NativeStart.main(Native Method)

我尝试设置环境变量,我设置了 LD_LIBRARY_PATH 和 BOOTCLASSPATH 变量。我什至尝试使用 LD_PRELOAD 预加载 liblog,但没有解决这个问题。dalvikvm 设置环境的方式似乎有问题/不同。

最佳答案

好问题!我不得不深入研究一下才能弄明白。

libandroid_runtime.so 中有大量 JNI 方法,因此在您使用 dalvikvm 命令时不会默认绑定(bind)。不幸的是,您不能只执行 System.loadLibrary("android_runtime"),因为这实际上并没有绑定(bind)所有 native 方法。

然而,经过一番挖掘,发现有一个内部的、非公开的、不保证存在的名为 com.android.internal.util.WithFramework 的类,其目的是加载 libandroid_runtime.so 并绑定(bind)其所有JNI 方法。

要使用它,只需在 dalvikvm 命令上将 com.android.internal.util.WithFramework 放在类名前面,如下所示:

dalvikvm -cp /some/path/classes.dex com.android.internal.util.WithFramework my.example.cls "This is an argument"

(注意:这仅适用于 M 之前的设备,因为 WithFramework 类是 removed in M - 感谢提醒@JaredRummler)

关于android - DalvikVM 上的 CLI 在 JNI 库上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13000561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com