“Apache Harmony를 사용하는 이유”또는“Android에서 Java 8을 사용하는 방법”
우리 대부분은 지금까지 Java 8이 가져올 멋진 기능에 대해 들어 봤지만 Android는이를 지원하지 않을 것입니다. 이는 Google이 Android 용 Apache Harmony 를 사용하기 때문입니다 . 이것이 우리 (안드로이드 앱 개발자)가 람다, 인터페이스의 기본 구현, 문자열 전환 등을 사용하여 코드를 개선하지 못하게하는 이유입니다. 당분간은 처리 할 것이지만 앱에서 사용하는 일부 라이브러리가 Java 8 기능을 사용하기 시작하면 어떻게 될까요? 내가 아는 한, 이것은 작동하지 않을 것입니다 (틀리면 나를 수정하십시오). 이로 인해 Standard -Java와 Android -Java 간에 비 호환성이 발생 합니다. Google이 의도 한 바가 아닐 수도 있고, 적어도 널리 채택 된 운영 체제를 개발하는 회사가 영구적으로 유지하고 싶지 않은 이유를 생각할 수 없습니다.이전 Java 버전.
질문 :
- Apache Harmony를 사용하는 이유는 무엇입니까?
- 최신 버전의 Java를 채택 할 수없는 이유는 무엇입니까?
- Oracle의 Java를 원하지 않는 경우 OpenJDK 의 하위 집합을 사용할 수없는 이유는 무엇입니까?
- 사용 된 Java 버전을 업데이트 할 계획이 있습니까?
- 현재 Android 시스템에서 Java 8 클래스를 사용하는 방법을 알고 있습니까?
Apache Harmony를 사용하는 이유는 무엇입니까?
Sun은 허용되는 조건에 따라 Sun (현재 Oracle) Java에 대한 라이센스를 Google에 제공하는 것을 거부했기 때문입니다. 구글과 썬은 협상을했지만 결국 거래에서 멀어졌다.
Nitpick : 사실 Android 라이브러리는 Apache Harmony가 아닙니다. 그들은 Harmony를 기반으로 시작했지만 두 코드베이스가 갈라졌습니다. 또한 Apache Harmony 프로젝트는 2011 년 11 월에 공식적으로 "폐기"되었습니다.
최신 버전의 Java를 채택 할 수없는 이유는 무엇입니까?
첫째, Android는 Java (tm)를 실행하지 않습니다. 다른 명령어 세트가 있는 가상 머신에서 Java 클래스 라이브러리 (+ Android 특정 라이브러리) 의 서브 세트 와 기능적으로 동일한 클래스 라이브러리를 사용하여 Java와 동일한 언어를 실행합니다 .
기술적 인 측면에서 볼 때 ...하지만 Android 플랫폼을위한 Java 7 및 Java 8 언어 기능, 라이브러리 기능 등을 구현하는 데 많은 작업을 할 경우에만 가능합니다.
업데이트 -Android 19 (KitKat) 및 Eclipse ADT 22.6부터 Android는 이제 Java 7 언어 확장을 지원합니다. http://tools.android.com/recent/eclipseadt226preview 참조
Oracle의 Java를 원하지 않는 경우 OpenJDK의 하위 집합을 사용할 수없는 이유는 무엇입니까?
OpenJDK로 전환해도 아무것도 바뀌지 않는다고 생각합니다. Oracle Java와 OpenJDK는 99.9 % 동일합니다.
어쨌든 라이선스 및 관련 법적 문제가있을 수 있습니다. (그리고 그것에 대한 느낌을 얻으려면 Oracle 대 Google 소송에 대해 읽어보십시오. 항소 할 것입니다.)
아마도 구글은 변화하는 데 필요한 (거대한) 노력과 파편화 문제로 이미 고통 받고있는 안드로이드 생태계에 미칠 혼란에 대응할만큼 충분한 상업적 가치를 보지 못하고 있습니다.
사용 된 Java 버전을 업데이트 할 계획이 있습니까?
아뇨. 계획이 없다는 뜻은 아니지만 만약 있다면 공개되지 않는다.
현재 Android 시스템에서 Java 8 클래스를 사용하는 방법을 알고 있습니까?
이식 할 수 있습니다. 또는 적어도 포팅을 시도 할 수 있습니다. (일부 Java API는 JVM의 기본 코드 측과 밀접한 관계가 있으며 포팅이 문제가 될 수 있습니다.)
현재 Android 시스템에서 Java 8 클래스를 사용하는 방법을 알고 있습니까?
Java 8 API의 일부를 백 포트하는 몇 가지 라이브러리가 있습니다 ( 최신 Android 버전에서 이러한 API의 기본 지원에 대해서는 아래 업데이트 섹션 참조).
- Android에 최적화 된 Java 8 날짜 및 시간 API의 ThreeTenABP 백 포트
- 스트림 지원 은 Java 6에 다시 존재하지 않았던 선택된 추가 기능으로 보완 된 Java 6 또는 7 사용자를위한 Java 8
java.util.function
(기능적 인터페이스) 및java.util.stream
(스트림) API 의 백 포트입니다java.util.concurrent
.
그리고 retrolambda ( gradle-retrolambda 플러그인 과 함께 )를 사용하여 Android 개발에서 람다를 활용할 수 있습니다.
최신 정보
그러나 Android Studio 2.4 Preview 4 (Android 플러그인 2.4.0-alpha4와 결합)부터는 일부 Java 8 언어 기능에 대한 기본 지원이 있습니다.
- 람다 식
- 메서드 참조
- 반복되는 주석
위에서 언급 한 기능은 모든 Android API 레벨에서 사용할 수 있습니다.
API 레벨 24부터 기본 및 정적 인터페이스 메소드와 다음 Java 8 API를 사용할 수도 있습니다.
java.util.stream
java.util.function
java.lang.FunctionalInterface
API 레벨 26 (Android O 미리보기)은 java.time
API 지원을 추가 합니다.
최신 정보.
Android는 OpenJDK를 사용할 계획입니다. 아마도 그들은 당신처럼 생각하고 Java 8 기능을 사용하기를 원하기 때문일 것입니다. 참조 이
참고URL : https://stackoverflow.com/questions/16921337/why-apache-harmony-or-how-to-use-java-8-on-android
'Programing' 카테고리의 다른 글
C #에서 C ++ / CLI를 어떻게 호출합니까? (0) | 2020.11.21 |
---|---|
SOLID 대 YAGNI (0) | 2020.11.21 |
웹 사이트에서 검색 기능을 어떻게 구현합니까? (0) | 2020.11.21 |
Windows에서 자식 프로세스를 자동으로 제거하려면 어떻게합니까? (0) | 2020.11.21 |
기본 클래스의 사용자 정의 변환 연산자 (0) | 2020.11.21 |