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

时间:2016-02-05 02:54:32

标签: android ethernet

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

2 个答案:

答案 0 :(得分:3)

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

Android隐藏API库是一个经过修改的jar文件,它将来自Android SDK的android.jar与来自真实设备的framework.jar相结合。这个jar使您能够在开发中使用Android内部/隐藏API。

什么是Android内部和隐藏API?内部API位于com.android.internal包中,该文件位于真实Android设备的framework.jar文件中,而隐藏的API位于在具有@hide Javadoc属性的android.jar文件中。虽然班级&方法是public,但您无法访问它。您可以从此包中使用相当多的方法和资源。我将假设这是一个API,并将其称为隐藏API。详细了解隐藏的API here

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

enter image description here

此课程适用于API级别22及更高级别。但是,定制的API有局限性。 Android隐藏API不适用于Lollipop 5.1.1(API 22)和Marshmallow 6.0(API 23),因为我无法找到拥有此设备的任何人。如果您拥有它,请将framework.jar文件从位于/system/framework/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及更高版本构建。

答案 1 :(得分:0)

IIRC只有在设备扎根的情况下才能执行此操作。

这里有一个很好的解释:Ethernet Connectivity through Programatically (Android) (Rooted Device)