Android JNI可以作弊封装吗?

问题描述 投票:0回答:2

当天的惊人发现:根据Java规则,您是lets you access object fields的Android not supposed to上的JNI。

此功能绕过任何地方记录的访问限制吗?这是官方的JNI行为,还是特定于JNI的Android风格?这是未定义的行为吗? OOP警察现在随时会来找我吗?

我知道依赖未发布的对象字段具有内在的危险,并且随时可能中断;这不是这里的问题。

更新:看起来像针对API28的应用程序不再具有此功能。

android oop android-ndk java-native-interface encapsulation
2个回答
0
投票

今天的惊人发现:根据Java规则,Android上的JNI允许您访问不应使用的对象字段。

缩写JNI在the question and answers that you linked to中没有出现,只是作为动态生成的指向此问题的链接。

此文件记录在任何地方吗?

关于Java开发的任何体面的书都应涵盖publicprivate

这是官方的JNI行为还是Android专有?

都不是

什么是[[is Android特有的编译时步骤,使您很难在某些androidjavajavax程序包中添加代码。

这是未定义的行为吗?

这取决于您要绑定到代词“ this”的基础名词或概念。

如果“此”是“正在访问私有等内容”,则该行为并非未定义。

如果“ this”是“正在访问Android框架中特定的私有对象等”,则

is

未定义。周围有很多很多版本的Android,还有很多版本的框架类。它们的内部实现方式并不相同。任何未通过Android SDK公开的内容都可以由Google,设备制造商,ROM mod维护者等进行更改。

1
投票
该问题已在2006年发布的article, or rather proposal中进行了描述,甚至得到解决。

[请注意,Javs定义了SecurityManager类,但它会将所有JNI调用都视为security breach,因此从他们的角度来看,您的问题不是问题,就像问"why can I get elevation to Administrator when I only install some driver/service?"

但是在Android上,情况更加明确。带有下列前言的正式文档describes this class

旧版安全代码;不要使用。

安全管理者确实

不是提供了用于执行不受信任代码的安全环境。无法信任的代码无法在Dalvik VM中安全隔离。

[重点是他们的)

[如果您正在寻找更强的词以保证从JNI访问本机字段和方法不会在下一版Android中消失,那么祝您好运。

另一方面,某些未来版本的Android会更改某些私有字段和方法的名称或签名的可能性更高。而且,他们可以更改实现,以便保留字段,但必须以不同的方式使用。

最后请注意,所有这些注意事项不仅适用于private或

package private

方法,而且还适用于未纳入官方文档的public
方法和字段!
© www.soinside.com 2019 - 2024. All rights reserved.