Android Studio - android.jar 和 rt.jar 冲突

Android Studio - android.jar and rt.jar conflicts

我正在使用 Android Studio 2.1.2 开发 Android 应用程序。

在外部库的类之一(特别是IBM Bluemix的Watson库,com.ibm.watson.developer_cloud:java-sdk:3.0.1)我需要导入这三个类:

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

问题是无法进行这些输入(无法解析符号)。这是我的场景:

android.jar

rt.jar

当我尝试导入 javax 包时,我只看到 android.jar(加密, 微型版, 网络, 安全, sql, xml)。 我没有看到 rt.jar 中的那些,所以我不能使用 类例如,出现在 javax.naming 包中。

我试过用这种方式显式添加依赖

compile files ('C:/Program Files/Java/jdk1.8.0_77/jre/lib/rt.jar')

但我认为这是不正确的,事实上它编译但我不能运行在设备上因为这个错误:

Error:Execution failed for task ':app:transformClassesWithMultidexlistForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_77\bin\java.exe'' finished with non-zero exit value 1

这与我在 post 中遇到的问题相同:Javax content not accessible,但这次问题与请求导入的特定 Watson 库无关。

如何使 类 可见以让应用程序正常工作?

您不能将 rt.jar 与 Android 应用程序一起使用(并且与 android.jar 有点重叠)。那是桌面 JRE 的运行时库,而不是 Android。请参阅 the Android API reference 以获取可用软件包列表(您会注意到 javax.naming 不是其中之一。

显然 IBM 框架不 Android 兼容。

我之前的评估是不准确的,因为 README 明确指出它是:

The library supports Android 2.3 and above. For Java, the minimum requirement is 1.7. It depends on OkHttp and gson.

Source.

但是,我怀疑该问题与错误配置的凭据有关(请参阅 here)导致库随后尝试 JNDI 查找作为后备(肯定 不是 支持 Android).