0

我们可以覆盖android中的本机方法吗?除了扩展类/接口并实现其方法之外。
我们可以使用 .so 文件来覆盖原生方法吗?
例如。如果本机代码中有 methodA(),我们是否应该在 .so 文件中覆盖它。这样每次我们从android应用程序调用methodA()时,它都会在我们的.so文件中调用methodA()?

4

2 回答 2

0

不可以。Dalvik VM 对于 JNI DefineClass() 调用不够兼容。因此,您要加载的任何覆盖都必须以 dex 格式开始。

此外,在应用程序不知情的情况下,无法将本机库“注入”到应用程序中。

但是,你可以通过反射来做很多复杂的事情——无论是从 Java 还是从 C。如果这段代码获得了 Activity 的句柄,它可以找到类 SharedPreferences 的字段并将其替换为类 ExtendedSharedPreferences 的新字段。

于 2012-10-06T08:35:43.990 回答
0

你能举一个你认为它是原生方法的例子吗?但是,答案是否定的。如果您可以在不更新 rom 的情况下自定义 android,那么自定义 rom 的目的是什么...

编辑: 对于您提到的特定情况。我会扩展 SharedPreferences 并覆盖所有需要的方法。

于 2012-10-05T10:41:28.883 回答