2017-11-10 12 views
3

Android APIのレベルとバージョンについて多くの質問がありますが、この質問は異なるので、重複としてマークしないでください。OSバージョン、APIレベル、Javaバージョンの関係

Javaバージョン1.6,1.7,1.8がこれらの2つにどのように関係しているのか疑問に思っています。私の混乱の原因は、Pattern.UNICODE_CHARACTER_CLASSフラグを持つPattern.compileメソッドを以下のように使用しようとしていることです。

Pattern pattern = Pattern.compile("\\b" + keywordToCheck + "\\b", Pattern.UNICODE_CHARACTER_CLASS); 

は、それが言うことを言うPattern.UNICODE_CHARACTER_CLASSthe docsから導入されたバージョン:私は仮定1.7、それはJavaバージョン1.7以上で利用可能であることを意味します。私は、Androidプロジェクトにコード行を使用しようとしていますが、私は私のデバイス上でそれを実行するたびに私が取得:以下

java.lang.IllegalArgumentException: Unsupported flags: 256 

は私のbuild.gradleファイルの関連部分です

defaultConfig { 
     minSdkVersion 19 
     targetSdkVersion 26 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 

私の理解から、これは私のアプリが19インチ以上のAPIレベルを使用することを意味します。つまり、Android 4.4(KitKat)以上で動作することができます。アプリを実行している端末にはAndroid 6.0が搭載されています。 Javaのバージョンはこれにどのように適合していますか?

Android Studio 3.0 
Build #AI-171.4408382, built on October 20, 2017 
JRE: 1.8.0_152-release-915-b08 x86_64 
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o 
Mac OS X 10.12.6 

を、私はこのエラーを取得し、またAndroidのAPIレベル、バージョン、およびJavaのバージョンとの関係だ、なぜ誰かが私に説明することができます:私は、私が使用していると言うのAndroidメーカー3.0を使用していますか?ありがとう

答えて

2

1.7以降で利用可能となったときは、あなたが探しているドキュメントを確認してください。オラクル(公式Javaドキュメント)。だから常にJavaのバージョンになります。 Androidのドキュメントは常にAndroid SDKのバージョンを提供します。

Androidは、Javaの公式バージョンと常に100%互換性があるわけではありません。そうしようとしていますが、明らかに大きな図書館の塊はそこにはありません。疑わしいときは、Oracleのドキュメントではなく、クラスのAndroidのドキュメントを見てください。

JavaバージョンはAndroidバージョンとは独立しています。 Java 8は正式にAS3で完全サポートされました。それ以前は実験的とみなされていました。必要に応じてJava 7を使用することができます。 Java 8の場合、ほとんどの言語機能はすべてのプラットフォームで使用できますが、1つまたは2つには最低24のSDKバージョンが必要です。Javaストリームと注釈タイプ/繰り返し注釈があります。

あなたの特定の問題については、アンドロイドのドキュメントにフラグについて:「このフラグはAndroidには影響しません。ユニコード文字クラスは常に使用されています」ということに注意してください。だからあなたはただそれを取り除くことができます。

+0

ありがとうございました!その特定のフラグはAPIレベル24までサポートされていないようです。「Oracle Java」と「Android Java」の違いについて教えてください。 GoogleはこのパターンクラスをOracleとは別に実装していますか?あるいは、2つのJREが異なっていますか?両者の違いは何ですか? – strikerdude10

+1

Javaは言語です。 Oracleはそれを作成した会社(Sun)を買収し、リファレンス実装を行っています。 AndroidはJavaの別の実装を使用しています。構文は同じですが、すべてのライブラリをサポートしているわけではありません。異なる企業が独自のバージョンのC++、つまりJavascriptを持っているように。 Googleの実装は100%独自のものです。実際には、Googleは異なるバイトコード言語 - dalvikを使用しています。 –

+0

ああ、それを得ました。言語の構文は同じです(Javaにするもの)。それ以降のすべて:コンパイラ、JVM、ライブラリはGoogle/Oracle固有のものですか? – strikerdude10

1

例の場合、そのフラグはAPI 24まで追加されませんでした。多くの場合、たとえ特定の言語レベル(例えば7)のサポートが早く追加されたとしても、すべてが即座に追加されるわけではありません。何らかの理由で、Googleが待っている理由が何であれ待っている。

なぜ私にはわからないので、あなたにはわかりません。

Gabeが述べたように、JavaのバージョンはAndroidと必ずしも互換性がありません。

フラグがAPI 19以降で使用されているため、フラグがまだ追加されていないため、バージョン19と23の間でクラッシュする可能性があります。

また、バージョンの互換性はAndroidのバージョン別にJavaのバージョンを制限しないことにも注意してください。今では、あなたが望むAndroidのどのバージョンであれ、インスタンスをJava 8で実行できます。これは互換性です。

ただし、

のAndroid Studioの3.0以降のすべてのJava 7言語機能とプラットフォームのバージョンによって異なりJavaの8言語機能のサブセットをサポートしています。あなたはAndroid Java 8 Language Featuresを読めば、それは(強調鉱山)と言います。

ここでは例としてJava 8を使用していますが、これはほとんどのAndroidとJavaのすべてのバージョンに適用されます。

基本的に:

  • あなたが使用しているフラグがAPI 24.私の知る限りになるまで添加しなかった、使用はハードコーディングされた変数であっても追加されませんでしたがそこ
  • Androidは」doesnの必ずしもすべての単一のJava APIが必要であり、これらはAndroidのバージョンによって異なる
  • JavaのバージョンはAPIによって制限されませんが、アクセス可能な機能は異なります。つまり、Java 8をAPI(乱数)12で実行することができます。

2つの間に固定の関係(Android [x] = Java [x])はありません。 フィールド/メソッド/クラスは、瞬時に(特定のバージョンのJavaのサポートがリリースされた時点で)、まったく追加されないことがあります。


AndroidはプラットフォームベースでJavaはバージョンベースなので、Androidで使用されるJavaとJavaのバージョンは大きく異なります。両者のバージョンを比較することはできません。両者は別々のドキュメントを持っています。

Android(Java)の質問については、APIに大きな違いがあるためAndroidには適用されないOracleのマニュアルを使用するのではなく、API referenceにあるAndroidのドキュメントを参照する必要があります。

+0

ありがとう!私に混乱を招くことの1つは、このOracle APIとAndroid APIの違いです。 OracleとGoogleはそれぞれ独自にこのPatternクラスを実装していますか?私はOracleがJDKを持っていることを知っています8、GoogleはAndroid/Androidスタジオ用に独自のJDKを作っていますか?どのようにして、他の人がサポートすることができますか? – strikerdude10

+0

言語はJavaですが、Android SDKをJDKとして使用しています。比較の目的では、JDK = SDK。基本言語機能とそのようなものを得るためにはまだ開発キットが必要ですが、使用するインターフェイスはSDKを使用しています。オラクルはJavaであり、彼らはクラスを作った。 AndroidはAndroidの新しいバージョンでは後でSDKに実装していますが、コンパイラに基づいた「純粋な」言語のもの(ラムダなど)の一部は以前のバージョンをサポートします。フィールドは、 – Zoe

関連する問題