- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 NDK 应用程序,可以通过 dlopen
加载的插件进行扩展。这曾经工作得很好,但它不再适用于 Android N。如 developer documentation 中所述, dlopen
现已正式废弃:
Starting in Android 7.0, the system prevents apps from dynamically linking against non-NDK libraries, which may cause your app to crash. This change in behavior aims to create a consistent app experience across platform updates and different devices.
...
All apps generate a runtime error when they call an API that is neither public nor temporarily accessible. The result is that System.loadLibrary and dlopen(3) both return NULL, and may cause your app to crash.
我看到有一个 hack简单地为 Android 手动实现 dlopen
和 dlsym
。这似乎适用于 Android N,但当然没有人知道它还能工作多久。
这就是为什么我正在考虑将我的插件设计更改为官方支持且面向 future 的东西。最明显的选择是使用 Android 的服务 API,并将我的插件简单地分发为实现服务的单独 APK。
但是,我不太喜欢这个想法,因为我使用的是 NDK,而且我认为服务 API 不适用于 NDK。当然,我可以用 Java 创建一个服务,然后使用 JNI 将它与我的 C 代码集成,但这当然不是一个非常优雅的解决方案。
这就是为什么我想问一下,在 Android N 中支持以前基于 dlopen
的插件的推荐方法是什么?是否有替代路线,或者我现在是否被迫使用服务 API?
最佳答案
备案;这在 android-ndk 谷歌组/邮件列表中进行了讨论,事实证明 dlopen
根本不是原始海报的罪魁祸首:
https://groups.google.com/d/msg/android-ndk/hhUv1mg3c_A/a5BbRtr-AwAJ
Oops, sorry, actually, dlopen() is still working fine on Android 7.0. I was getting the following error message:
Detected problems with app native libraries (please consult log for detail):
foobar.so: text relocations
进一步阐明了开发者文档中的措辞:
https://groups.google.com/d/msg/android-ndk/hhUv1mg3c_A/eIKHZZcDBAAJ
I guess the wording does technically make it sound like you're now [sic: read not] allowed to link to your own libraries. That definitely is not the case. The policy is that your cannot link to or dlopen private system libraries (anything in /system/lib that is not in the NDK).
关于android - 如何在 Android Nougat 中替换 dlopen()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897797/
我的应用程序显示通知以指示下载进度。但是自从重新设计通知(Android 7.0+)以来,只要标题文本较长,就不会显示描述文本,它会显示从 xyz MB 下载了多少数据。所以这对我的用户来说很重要。加
我想为 android nougat 创建一个应用程序,当我单击一个按钮时,我会在同一时刻在同一屏幕上启动两个应用程序。我想使用Android 7的这个新功能,可以吗? 最佳答案 您可以使用 Acce
有人试过为应用程序设置最小高度以在牛轧糖多窗口模式下使用吗? 试过了, 我的引用是这样的:https://developer.android.com/guide/topics/ui/mu
我的应用程序在 5+ 和 6+ 上完美运行,但在 7 上却不行。当应用程序尝试登录服务器时抛出此异常: 09-01 09:52:53.821 2654-2718/com.pipodi.italians
我正在开发带有后台服务的 Android 应用程序。服务在自己的进程中运行(如 com.example.app:extProccess)。创建 WebSockets 连接的服务。但在服务启动后不到 1
我有一个名为 ProApplication 的自定义应用程序,我在 list 中定义它,如下所示: 我在 Canvas 上创建了一个圆形剪辑路径,并且有一列数字在 Canvas 上进行了动画处理,因此我看到数字在剪辑部分中进行动画处理并进行动画处理。这是裁剪代码: mClipPath.addCirc
在 Android(目标 25)中,我有一个后台服务,在 onCreate 函数中我已经初始化了一个电话状态监听器。它在 Nougat 之前的 Android 版本上运行良好,但在 Nougat 中它
我在 Android 7.x 中将通知小图标设置为黄色时遇到问题 我在构建通知对象时使用 notification.setColor(Color.YELLOW);。它显示橄榄色(有点)而不是黄色。 还
这list of changes对于 Android Marshmallow 非常有用。牛轧糖有类似的 list 吗?如果是,如何找到它? 最佳答案 目前Android N还处于预览状态,所以它的文档
从一年开始,我一直在研究 IOT 产品,并且附加的应用程序运行良好。现在我无法在更高版本的android中以编程方式接受调用。功能对产品来说非常重要。非常感谢任何帮助。 在安全补丁更新 2016 年
自 Android N 开发者预览版第一次发布以来,我在尝试列出根目录或其他系统目录时收到“权限被拒绝”错误。这些目录的权限似乎没有改变(据我所知)。 问题: Android N 中的哪些更改导致了这
我已将手机更新为 android nougat,裁剪功能突然无法使用。在 Marshmallow 中工作得很好。这是我的build.gradle apply plugin: 'com.andr
我像这样开始工作: JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE); if(sc
我正在自定义日期和时间选择器。当我在 android Nougat 上尝试时,OK 和 Cancel 按钮显示为半透明灰色。见附图。在 android 6 中——它看起来很好……有任何想法吗?谢谢
我正在我的服务的 onStartCommand 中注册我的 PhoneStateListener。它在以下 android N 设备中运行良好。但有时它在 android N 设备中没有响应。它与打瞌
Android 7.0 Nougat 带来了新的内联通知 - 能够在通知中回复消息。我想知道如何更改内联回复背景和突出显示颜色。 玩了一下,我发现背景颜色取决于您的 colorPrimary。然后从原
尝试使用以下方法更改 Nougat 中的应用程序语言,但失败了。 config.setLocales(new LocaleList(locale)); getBaseContext().createC
我想知道我的应用程序在后台时是否被杀死。我正在使用 android nougat 设备进行测试。但是当我通过滑动杀死我的应用程序时,我的服务的 onTaskRemoved() 没有调用。 有什么方法可
我有一个登录屏幕,它有两个 EditText,一切正常,但是当我在 android nougat 7.0.1 中运行应用程序时,登录屏幕的光标显示在中心。我也尝试过此处提供的解决方案......但不适
我是一名优秀的程序员,十分优秀!