android - 有没有办法在 Android 应用程序中访问 android.net.EthernetManager?

标签 android ethernet

有没有办法访问android.net.EthernetManager在 Android 应用程序中? Class.forName("android.net.ethernet.EthernetManager") 和 Class.forName("android.net.EthernetManager") 都会生成 ClassNotFoundException。

最佳答案

似乎android.net.EthernetManager 是一个隐藏类,Javadoc 标记为@hide。您可以使用制作的定制 SDK 平台访问它 here ,并且您不需要对设备进行 root。

Android Hidden API library是一个修改后的jar文件,它结合了来自Android SDK的android.jar和来自真实设备的framework.jar。这个 jar 使您能够在开发中使用 Android 内部/隐藏的 API。

什么是 Android 内部和隐藏 API?内部 API 位于 com.android.internal 包中,可在 framework.jar 来自真实 Android 设备的文件,而隐藏的 API 位于具有 @hide Javadoc 属性的 android.jar 文件中。虽然类和方法是public,但您不能访问它。您可以从这个包中使用漂亮的方法和资源。我假设这是一个 API,并将其称为隐藏 API。了解有关隐藏 API 的更多信息 here .

所以,看看这个 @hide 标记:

enter image description here

此类在 API 级别 22 及更高级别上可用。但是,定制的 API 有局限性。 Android Hidden API 不适用于 Lollipop 5.1.1 (API 22) 和 Marshmallow 6.0 (API 23),因为我找不到任何拥有此设备的人。如果你有,请从位于/system/framework/framework.jar的物理设备上传framework.jar文件到here .我会做一个新的!

另一个限制

我还没有解释隐藏 API 的另一个限制。当您使用此隐藏 API 的某些功能、方法、资源或类时,这些功能、方法、资源或类仅在特定 API 级别可用,您的应用程序只能在适当设备的 API 级别内访问它们。例如,您在应用程序中使用 android.net.EthernetManager,您必须将目标和编译 SDK 设置为 android-22(因为此类仅在 API 上可用22 级及以上)。在 API 级别 22 及更高级别的设备上运行应用程序后,不会显示任何错误。但是,一旦您在 API 级别 21 或更低级别上运行该应用程序,就会抛出一个错误,例如 java.lang.NoClassDefFoundError,因为 android.net.EthernetManager 类是仅为 API 22 及更高版本构建。

关于android - 有没有办法在 Android 应用程序中访问 android.net.EthernetManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35215533/

相关文章:

java - 如何在不丢帧的情况下将 ByteBuffer 转换为位图,反之亦然?

android - SQLite 没有创建数据库

android - 如何处理屏幕旋转上的密码输入

networking - 如何确定以太网 II 帧的长度?

linux - 在 Linux 上创建新的以太网 USB 网络接口(interface)

android - 单击切换按钮时 TextInputLayout (TextInputEditText) NullpointerException

java - 膨胀 View 时出错

connection - Arduino Ethernet Shield 未连接到 WebServer

qt - 从以太网上的 Qt 应用程序发送文件

network-programming - 如何访问 mBlk 以太网包中的 header 和数据信息?特别是我想提取发件人IP