1

私はAndroid Studio 2.1.2でAndroidアプリケーションを開発しています。外部ライブラリのクラスの一つでAndroid Studio - android.jarとrt.jarの競合

(IBM Bluemix、com.ibm.watson.developer_cloud:java-sdk:3.0.1の特にワトソンライブラリ)私は、これらの三つのクラスをインポートする必要があります。

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

問題は、(これらの輸入が不可能であるということですシンボルを解決できません)。これは私のシナリオです:私はjavaxのパッケージをインポートしようとすると、私は唯一のandroid.jar(暗号、microedition、ネットにあるものを参照してください

android.jar

rt.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 

は、それは私がこの記事に遭遇した同じ問題です:Javax content not accessibleが、今回は問題が輸入を要求し、特定のワトソンライブラリから独立しています。

アプリケーションを動作させるためにクラスを可視にする方法は何ですか?

+0

"rt.jarにあるものは表示されないので、javax.namingパッケージにあるクラスは使用できません。" - つまり、Androidの一部ではないためです。コンパイルする 'android.jar'は、コンパイラを満足させるのに十分な一連のスタブです。そのJARに相当するのは、Androidファームウェアの一部であり、実行時にプロセスにロードされます。どちらのクラスもありません。 Androidと互換性のあるBluemixの別のバージョンがあるかどうかを確認してください。 – CommonsWare

+0

あなたがAndroidライブラリを見つけることができない場合、あなたはいつもあなたのIBMのものを実行するJava Webサーバーを作ることができ、そのAndroidデバイスのメソッドを呼び出すことができます –

+0

助けてくれてありがとう!私は受け入れられた答えにもコメントし、問題の追加説明を書いた。 – Dieghitus

答えて

2

rt.jarをAndroidアプリケーションで使用することはできません(一部ではandroid.jarと重複しています)。これは、Androidではなく、デスクトップJRE用のランタイムライブラリです。あなたはjavax.namingはそのうちの一つではないことがわかります(利用可能なパッケージのリストについては、the Android API referenceを参照してください。

明らかにIBMのフレームワークが互換性のアンドロイドではないこと。

私の以前の評価が明確にREADMEとして不正確ですそれがあると述べている:

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

Source.

しかし、私は問題が間違ってのconfに関係している疑いがあります(hereを参照)、ライブラリはJNDIルックアップをフォールバックとして試みます(これは確かにはAndroidでサポートされていません。)。

+0

明確化のためにありがとう、私はこれを疑ったが、それは私の心の中ではっきりしていなかった。 「 : はhttps://github.com/watson-developer-cloud/java-sdk#android 実行時に表示されるエラーはこれです:アプリケーションで は、私は、AndroidをサポートするJava SDKを使用していますメソッドcom.ibm.watson.developer_cloud.util.CredentialUtils.getKeyUsingJNDI "から参照されるクラス 'javax.naming.InitialContext'を見つけることができませんでした。 この部分はAndroid 2.3以上で動作するはずですが、API呼び出しはAndroid用に特別に行われています...この問題の解決方法はわかりません:/ – Dieghitus

+0

@Dieghitus AndroidはJDNIをサポートしているとは思われません。問題の根。それはJava EE機能の多くです。 –

+0

@Dieghitusああ、私は問題があると思う。私は(他のフレームワークがこのように動作するように)プロパティファイルに正しく設定された資格情報を持っていないので、他の手段(JNDIのうちの1つ)を使用してそれらを検索しようとしています。ただし、Androidではサポートされていません。資格情報を正しく設定する方法については、https://github.com/watson-developer-cloud/java-sdk#getting-the-service-credentialsを参照してください。 –

関連する問題