DalvikVM 上的 CLI 在 JNI 库上失败

2024-03-20

我需要在 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 命令时,默认情况下它们不会被绑定。不幸的是,您不能只执行 System.loadLibrary("android_runtime"),因为这实际上并没有绑定所有本机方法。

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

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

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

(注意:这仅适用于 M 之前的设备,因为 WithFramework 类是在 M 中删除 https://android-review.googlesource.com/#/c/157981/- 感谢@JaredRummler 的提醒)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DalvikVM 上的 CLI 在 JNI 库上失败 的相关文章

  • 如何更改Appcompat主题中的TimePicker线条颜色?

    如何更改 Appcompat 主题中所选数字之间的 TimePicker 线条颜色 线条是蓝色的 但我需要橙色线条 我将 TimePickerDialog 与 ContextThemeWrapper 一起使用 TimePickerDialo
  • 在 Android 10/Q 上运行的 Android ACTIVITY_RECOGNITION 权限 SDK 28 (SDK 29)

    我的 Android 应用程序以 SDK 28 为目标 并连接到 Google Fit 以上传数据并读取其他一些数据 该应用程序使用 HistoryAPI 读取 com google step count delta 数据 本文档声称 如果
  • onScale 和 Canvas - 缩放图像后如何调整原点?

    我有一个非常简单的测试应用程序 带有自定义组件MyView java https github com afarber android newbie blob master TestScroll src de afarber testscr
  • 如何从android中的webview获取选定的文本?

    我需要从网络视图中获取选定的文本 为此 我这样说 webView loadUrl javascript Android getHtml window getSelection toString 在我的触摸事件中 触摸事件效果很好 Andro
  • 如何使用 queryIntentActivityOptions() 方法

    我正在尝试创建一个对话框 显示用户手机中的所有应用程序 可用于从存储中选择照片或使用相机拍摄照片 以下是我计划使用的两个意图 Intent photoPickerIntent new Intent Intent ACTION PICK ph
  • Android:等待 firebase valueEventListener

    我正在尝试使用信号量来等待我的 firebase valueEventListener 我有一个用户信息活动 其中包含用户必须填写的 6 个不同字段 当用户保存他 她的信息时 我想进行 全有或全无 类型的检查 某些用户信息不能重复 例如用户
  • 如何解决 FireBase 数据库 Key 中的禁止字符或解决方法

    我有这个 FireBase 数据库结构 我真的很想拥有像这个例子这样的密钥 US name United States PATH TO STREETS US California Orange County Orange 3138 E Ma
  • Android:如何在双 SIM 卡手机中获取两张 SIM 卡的 SIM ID

    我想获取双 SIM 卡手机中两个 SIM 卡的 SIM 序列号 ID 有什么方法可以获取它们吗 提前致谢 import java lang reflect Method import android content Context impo
  • 实施材质主题时遇到问题

    我在用this http antonioleiva com material design everywhere 作为在 Android 5 0 之前的设备上向现有应用程序实施 Material 主题的教程 我的问题是我得到了Null Po
  • 如何模糊视图

    I have a view having different colors I need to blur the background of that view for example There is LinearLayout in wh
  • 从 JSON 数组创建标记 php mySQL Google Maps v2 android

    我正在尝试从 mySQL 数据库在 Google Maps v2 上创建标记 但它不起作用 地图确实出现了 但没有标记 谁能告诉我出了什么问题以及我需要改变什么 我也尝试过让 getDouble 为 getDouble 0 和 getDou
  • 长按 HOME 按钮菜单隐藏 Android 应用程序

    我想从 且仅从 完成后长时间按住 HOME 按钮时出现的菜单中隐藏我的 Android 应用程序 有没有办法做到这一点 以编程方式调用 finish 并不能解决问题 有很多关于从启动器和任务管理器隐藏应用程序的线程 但这不是我想要的 我只是
  • 在 Android 运行时更改和应用主题 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Android 运行时更改当前主题 https stackoverflow com questions 2482848 how to change current theme at runti
  • SQLiteConstraintException:错误代码19:约束失败——Android错误

    我已经看到了一些与此相关的其他问题 但没有一个答案似乎真正适用于我的代码 当我尝试插入数据库时 出现 SQLiteConstraintException 错误代码 19 约束失败 错误 这是插入操作的代码 db insert 现在返回 1
  • webView.loadUrl 显示空白屏幕

    我必须加载这些通过使用下面的代码 但最终显示空白屏幕作为输出 您可以检查url代码之间的链接位于last line WebPagerLoader java public class WebPageLoader extends Activit
  • 对话框片段中的 onActivityResult

    我正在从对话框片段中拍照 我还需要类似的东西startActivityForResult takePictureIntent actionCode Override public void onActivityResult int requ
  • 无法获取 android.permission.CLEAR_APP_USER_DATA

    我正在开发需要特殊权限的系统应用程序 由于某种原因 我无法获得 CLEAR APP USER DATA 权限 但我可以使用 INSTALL PACKAGES DELETE PACKAGES 等 什么可能导致这种情况 显现 uses perm
  • Android 上的 Facebook 深度链接

    我正在尝试在我的应用程序上实现 Facebook 的深度链接功能 并遇到了以下情况 我有一个名为 MainActivity 的活动 其声明如下
  • Jetpack 中的波浪框组成

    有没有办法用Canvas制作一个顶部有波浪形的盒子 我想知道这个效果是否可以直接用Canvas来实现 不需要有滚动动画 不太清楚你为什么在谈论Canvas 要裁剪这样的视图 您可以使用自定义Shape并将其应用到您的视图中Modifier
  • 在edittext android中插入imageview

    我想将 imageview 放在 edittext 中 可能吗 我检查了 evernote 应用程序 它能够将照片放在编辑文本部分 我想让我的应用程序完全相同 我如何才能将从图库中选择的图像视图放入编辑文本中 我首先尝试将 imagevie

随机推荐