覆盖android中的本机方法

时间:2012-10-05 10:28:17

标签: android android-ndk android-library

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

2 个答案:

答案 0 :(得分:0)

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

修改 对于你提到的具体情况。我将扩展SharedPreferences并覆盖所需的所有方法。

答案 1 :(得分:0)

没有。 Dalvik VM与JNI DefineClass()调用不兼容。因此,您要加载的任何覆盖必须以dex格式开头。

此外,没有应用程序的知识,没有办法将“原生lib”注入应用程序。

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