Android的反编译.class文件未显示相应.java文件的所有方法

时间:2018-11-18 01:18:45

标签: java android android-studio smsmanager

因此,我正在构建一个应用程序,将所有消息(AND彩信,带有附件)从iOS(iTunes备份)复制到Android Pie(OxygenOS)。

我浏览了Android的SmsManager.java文件,发现了两种方法:

  • importTextMessage(...)
  • importMultimediaMessage(...)

它们似乎是我要寻找的,但是:

  • 它们不会出现在反编译的SmsManager.class文件中
  • 当我仍然尝试使用它时,编译器会抱怨
  • 最后,它们没有记录。

那么,问题。为什么它们出现在SmsManager.java中而不出现在SmsManager.class中(jetbrains反编译器)?他们为什么没有记录?如何使用这些方法?

编辑:我已在OnePlus 6T上成功还原了备份。如果您想要一个有效的项目,请参见https://github.com/let-aurn/iosmessagetoandroid

2 个答案:

答案 0 :(得分:1)

  1. import numpy as np from sklearn.model_selection import GroupShuffleSplit X = np.array([0.1, 0.2, 2.2, 2.4, 2.3, 4.55, 5.8, 0.001]) y = np.array(["a", "b", "b", "b", "c", "c", "c", "a"]) groups = np.array([1, 1, 2, 2, 3, 3, 4, 4]) gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=0) train, test = next(gss.split(X, y, groups=groups)) X_train, y_train = X[train], y[train] X_test, y_test = X[test], y[test] javadoc批注应仅对javadocs隐藏该方法。但是,Android文档指出:

      

    通常,应用程序应仅使用SDK中类的正式记录部分。特别是,这意味着当您通过反射等语义与类进行交互时,您不应计划访问SDK中未列出的方法或字段。

    然后继续说明,可能通过各种方式阻止对内部API的反射和其他访问。

    来源:Restrictions on non-SDK interfaces

  2. 有可能通过修改构建“ .class”文件的源代码或在编译后通过某些字节码操作来删除了这些方法。这样做是为了防止您偶然编写依赖于内部API方法的代码。

  3. 如果在您针对其进行编译的接口中没有该方法(出于某种原因),则您不应尝试其他访问方式。即使您成功了,将来也有可能引起可移植性问题。

答案 1 :(得分:1)

用@hide注释的方法不属于公共Android API的一部分,也不适合开发人员使用。它们通常仅在班级内部,并且在Android版本之间可能会发生变化。

您可以通过反射调用这些方法,但请谨慎操作,因为它们可能会更改或删除。您应该始终检查该方法何时出现在.java文件中,何时更改签名以及是否/何时删除该签名。然后将代码包装在需要的Android版本检查中。