如何解决添加Android中缺少的标准Java类
我正在使用Java安全提供程序,该程序从javax.security.auth.login包中引发FailedLoginException。 当我在Android App中使用这些提供程序时,我遇到了Android的javax.security.auth.login包不具有此类的问题,它仅具有LoginException,而后者是其他类的基类。因此,无论何时抛出FailedLoginException,我的应用程序都会抛出NoClassDefFound。
是否可以将缺少的标准Java类添加到我的Android应用中,或者解决该错误?
感谢您的帮助!
解决方法
是否可以将缺少的标准Java类添加到我的Android应用中,或者解决该错误?
AFAIK,不,不。
我怀疑我们能为您提供的最佳建议是:
请勿通过这种方式进行用户身份验证!
Android不支持javax.security.**
的全部,尤其是它不支持JAAS身份验证和授权框架,这显然是您尝试使用的框架。
请参阅:
(理论上)虽然有可能将JAAS移植到Android,但我还没有发现任何证据表明有人成功做到了这一点。
, Java中的NoClassDefFoundError与ClassNotFoundException不同,当Java虚拟机无法在运行时找到在编译时可用的特定类时出现。参见:3 ways to solve java.lang.NoClassDefFoundError in Java J2EE
在Android Studio项目资源管理器中检查 rt.jar :外部库-> -> rt.jar-> javax->安全->身份验证->登录-> 。您会看到 FailedLoginException 存在。
现在检查外部库->-> android.jar-> javax->安全-> auth->登录-> 。您会看到 FailedLoginException 不存在。
这意味着您的库由rt.jar编译,现在与android.jar一起使用。在另一边 您不能将rt.jar与Android应用程序配合使用(并且与android.jar有所重叠)。因为它是桌面JRE而非Android的运行时库。参见:Android Studio - android.jar and rt.jar conflicts
现在要解决您的问题,您可以将源代码获取到外部库并重写。参见How to use classes from rt.jar in an android application?
我建议您自己使用一些调试功能来实现该类,以避免其他相关类的实现。
不推荐的另一种方法是从here下载一个jar并将其添加到您的项目中。
,开发任何新的Android OS时,它都附带了一堆Java类,这些Java类为需要这些类才能运行的应用程序提供支持。让我们考虑这种情况下的Time API。它已添加到Android API级别26,因此,使用此库的应用将在较低的API级别(如棉花糖(API 23))上崩溃。
这是照片中要减糖的时候。它允许较低的API级别与新的Java库一起使用。我们将了解它是如何实现的,但在此之前,让我们启动Android Studio进行快速演示,以使事情更加清晰。
要解决此问题,我们需要使用以下步骤在我们的项目中启用反欺诈。
- 将Android gradle插件设置为4.0或更高版本。
- 在编译选项中,启用coreLibraryDesugaringEnabled标志并将Java目标和源兼容性设置为Java 8。
- 在编译选项中,启用coreLibraryDesugaringEnabled标志并将Java目标和源兼容性设置为Java 8。
- 启用multidex(用于支持API级别20或更低级别的项目)
- 添加退避三舍的依赖性。
var target = document.getElementById("target");
target.addEventListener('mousemove',function (event) {
target.style.left = event.x + "px";
target.style.top = event.y + "px";
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。