2017-11-10 9 views
3

여기 Android API 레벨 및 버전에 대해 많은 질문이 있지만이 질문은 서로 다르므로 중복으로 표시하지 마십시오.OS 버전, API 레벨 및 Java 버전 간의 관계

Java 버전 1.6, 1.7, 1.8 ...이 둘과 어떻게 관련되어 있는지 궁금합니다. 내 혼란의 원인은 아래에 표시된 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 이상에서 사용할 수 있습니다 의미합니다. 나는 안드로이드 프로젝트에 코드 줄을 사용하려고하지만 난 내 장치에서 실행할 때마다 내가 얻을 : 아래

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이 있습니다. 자바 버전은 어떻게 이것에 들어 맞습니까? 내가 사용하고 밝히는 안드로이드 스튜디오 3.0을 사용하고 있습니다 :이 오류를 받고 있어요 왜

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 

누군가가 나에게 설명 할 수, 또한 안드로이드 API 레벨, 버전, Java 버전 사이의 관계? 감사합니다.

답변

2

1.7 이후로 사용 가능하다고 말하면,보고있는 사람이 누구인지, 오라클 (공식 Java 문서)인지 확인하십시오. 그래서 항상 Java 버전이 될 것입니다. 안드로이드 문서는 항상 안드로이드 SDK 버전을 제공합니다.

Android가 Java의 공식 버전과 항상 100 % 호환되는 것은 아닙니다. 그것은 되려고하지만 분명히 도서관의 큰 덩어리는 거기에 없습니다. 확실하지 않은 경우 Oracle의 클래스가 아닌 Android 설명서를 참조하십시오.

자바 버전은 주로 Android 버전과 독립적입니다. Java 8은 AS3에서 공식적으로 완전히 지원되었습니다. 그 전에 그것은 실험으로 간주되었다. 원하는 경우 여전히 Java 7을 사용할 수 있습니다. Java 8의 경우 대부분의 언어 기능을 모든 플랫폼에서 사용할 수 있지만 하나 또는 두 가지 SDK 버전의 최소 24 개가 필요합니다. Java 스트림과 Annotation 유형/반복 주석이 두 가지로 있습니다.

특정 문제에 대해서는 안드로이드 설명서에서 플래그에 대해 "이 플래그는 Android에는 영향을주지 않으며 유니 코드 문자 클래스가 항상 사용됩니다." 그래서 그냥 제거 할 수 있습니다.

+0

정말 고마워요! 특정 플래그가 API 레벨 24까지 지원되지 않는 것 같습니다. "Oracle Java"와 "Android Java"의 차이점을 설명해 주시겠습니까? Google은이 Pattern 클래스를 Oracle과 별도로 구현합니까? 아니면 JRE가 둘 사이에 다른가요? 둘의 차이점은 무엇입니까? – strikerdude10

+1

Java는 언어입니다. 오라클은이를 작성한 회사 (Sun)를 인수하고 참조 구현을했습니다. 안드로이드는 별도의 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 Java 8 Language Features을 읽을 경우 (강조 광산) 말한다 :

안드로이드 스튜디오 3.0 이후 모든 Java 7 언어 기능 및 플랫폼 버전에 따라 다를 자바 8 언어 기능의 하위 집합을 지원합니다.

여기에서는 Java 8을 예로 사용하고 있지만 대부분 Android 및 java의 모든 버전에 적용됩니다.

은 기본적으로 : 당신이 사용중인 플래그가 API (24) AFAIK까지 추가 할 수 없습니다

    • 가, 사용이 심지어 하드 코딩 된 변수지만 추가되지 않았습니다
    • 안드로이드 '가 아무튼입니다 Java API는 반드시 모든 Java API가 있어야하며, 이들 버전은 Android 버전에 따라 다릅니다.
    • Java 버전은 API에 의해 제한되지 않지만 액세스 할 수있는 기능은 다양합니다. 원하는 경우 Java 8을 API (임의 번호) 12에서 실행할 수 있다는 의미입니다.

    둘 사이에는 고정 된 관계 (Android [x] = Java [x])가 없습니다. 필드/메소드/클래스은 결국 즉시 추가 될 수 있습니다 (특정 Java 버전에 대한 지원 릴리스시). 자바 버전을 기반으로하면서 안드로이드 플랫폼 기반이기 때문에


    정규 자바와 안드로이드에서 사용되는 자바의 버전

    는 두 개의 매우 다른 것입니다. 두 버전의 버전을 비교할 수는 없으며 둘 다 별도의 문서가 있습니다.

    Android (Java)에 대한 질문은 API reference에서 찾을 수있는 Android 문서를 살펴 봐야합니다. Android 문서는 API에 큰 차이가 있기 때문에 Android에 적용되지 않습니다.

  • +0

    정말 고마워요! 저를 혼란스럽게하는 한 가지는 오라클과 안드로이드 API의 차이점입니다. Oracle과 Google은 각각이 Pattern 클래스를 자체적으로 구현합니까? 나는 오라클이 JDK 8을 가지고 있다는 것을 알고있다. 구글은 안드로이드/안드로이드 스튜디오를 위해 그들 만의 JDK를 만들 수 있는가? 어떻게 한 사람이 다른 사람이 아닌 다른 사람을지지 할 수 있습니까? – strikerdude10

    +0

    언어는 Java이지만 Android SDK를 JDK로 사용합니다. 비교 목적으로 JDK = SDK. 기본 언어 기능과 일부 기능을 사용하려면 아직 개발 키트가 있어야하지만 결국 사용하는 인터페이스는 SDK를 통해 이루어집니다. 오라클은 자바입니다, 그들은 클래스를 만들었습니다. 안드로이드는 나중에 안드로이드의 새로운 버전을 위해 SDK에 이것을 구현한다. 컴파일러를 기반으로하는 "순수한"언어의 일부 (람다 같은)는 이전 버전을 지원할 것이다. 필드는하지 않습니다. – Zoe