gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:45 27 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 方法。

然而,经过一番挖掘,发现有一个内部的、非公共(public)的、不能保证存在的类,名为 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/41204903/

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