有没有办法在 Android 应用程序中访问 android.net.EthernetManager?
Is there a way to access android.net.EthernetManager in an Android app?
有没有办法在 Android 应用程序中访问 android.net.EthernetManager?
Class.forName("android.net.ethernet.EthernetManager") 和 Class.forName("android.net.EthernetManager") 都会生成 ClassNotFoundException。
IIRC 只有在您的设备已获得 root 权限后才能执行此操作。
这里有一个很好的解释:Ethernet Connectivity through Programatically (Android) (Rooted Device)
似乎 android.net.EthernetManager
是一个隐藏的 class,被 Javadoc 标记为 @hide
。您可以使用here定制的SDK平台访问它,并且不需要root设备。
Android 隐藏 API 库 是一个修改后的 jar 文件,它将 Android SDK 中的 android.jar
与 framework.jar
来自真实设备。这个 jar 使您能够在开发中使用 Android internal/hidden API。
什么是Android内部和隐藏APIs?内部API位于com.android.internal
包中可用在真实 Android 设备的 framework.jar
文件中,而隐藏的 API 位于具有 @hide
Javadoc 属性的 android.jar 文件中。虽然 classes & 方法是 public
,但您无法访问它。您可以从这个包中使用漂亮的方法和资源。我假设这是一个 API 并将其称为隐藏 API。详细了解隐藏 API here.
所以,看看这个 @hide
标记:
此 class 可用于 API 22 级及更高级别。但是,自定义的 API 有局限性。 Android 隐藏 API 不适用于 Lollipop 5.1.1 (API 22) 和 Marshmallow 6.0 (API 23),因为我找不到任何人拥有这个设备。如果有,请从位于 /system/framework/framework.jar
的物理设备上传 framework.jar
文件到 here。我会做一个新的!
另一个限制
Hidden API 的另一个限制我还没有解释。当您使用某些仅在特定 API 级别可用的隐藏 API 功能、方法、资源或 classes 时,您的应用只能在适当设备的 API级。例如,您在应用程序中使用 android.net.EthernetManager
,您必须将目标和编译 SDK 设置为 android-22
(因为此 class 仅适用于 API 22 级及更高级别).一旦您 运行 您的应用程序在具有 API 级别 22 及更高级别的设备上,则不会显示任何错误。但是,一旦您 运行 API 级别 21 和更低级别的应用程序,将抛出错误,例如 java.lang.NoClassDefFoundError
,因为 android.net.EthernetManager
class 仅构建API 22 岁及以上。
有没有办法在 Android 应用程序中访问 android.net.EthernetManager? Class.forName("android.net.ethernet.EthernetManager") 和 Class.forName("android.net.EthernetManager") 都会生成 ClassNotFoundException。
IIRC 只有在您的设备已获得 root 权限后才能执行此操作。
这里有一个很好的解释:Ethernet Connectivity through Programatically (Android) (Rooted Device)
似乎 android.net.EthernetManager
是一个隐藏的 class,被 Javadoc 标记为 @hide
。您可以使用here定制的SDK平台访问它,并且不需要root设备。
Android 隐藏 API 库 是一个修改后的 jar 文件,它将 Android SDK 中的 android.jar
与 framework.jar
来自真实设备。这个 jar 使您能够在开发中使用 Android internal/hidden API。
什么是Android内部和隐藏APIs?内部API位于com.android.internal
包中可用在真实 Android 设备的 framework.jar
文件中,而隐藏的 API 位于具有 @hide
Javadoc 属性的 android.jar 文件中。虽然 classes & 方法是 public
,但您无法访问它。您可以从这个包中使用漂亮的方法和资源。我假设这是一个 API 并将其称为隐藏 API。详细了解隐藏 API here.
所以,看看这个 @hide
标记:
此 class 可用于 API 22 级及更高级别。但是,自定义的 API 有局限性。 Android 隐藏 API 不适用于 Lollipop 5.1.1 (API 22) 和 Marshmallow 6.0 (API 23),因为我找不到任何人拥有这个设备。如果有,请从位于 /system/framework/framework.jar
的物理设备上传 framework.jar
文件到 here。我会做一个新的!
另一个限制
Hidden API 的另一个限制我还没有解释。当您使用某些仅在特定 API 级别可用的隐藏 API 功能、方法、资源或 classes 时,您的应用只能在适当设备的 API级。例如,您在应用程序中使用 android.net.EthernetManager
,您必须将目标和编译 SDK 设置为 android-22
(因为此 class 仅适用于 API 22 级及更高级别).一旦您 运行 您的应用程序在具有 API 级别 22 及更高级别的设备上,则不会显示任何错误。但是,一旦您 运行 API 级别 21 和更低级别的应用程序,将抛出错误,例如 java.lang.NoClassDefFoundError
,因为 android.net.EthernetManager
class 仅构建API 22 岁及以上。