有没有办法在Android应用中访问android.net.EthernetManager? Class.forName(“android.net.ethernet.EthernetManager”)和Class.forName(“android.net.EthernetManager”)都生成ClassNotFoundException。
答案 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
标记:
此课程适用于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)