programing tip

Android 개발에 Java 8을 사용할 수 있습니까?

itbloger 2020. 10. 3. 10:03
반응형

Android 개발에 Java 8을 사용할 수 있습니까?


웹을 검색하면 Java 8이 Android 개발에 지원되는지 여부가 명확하지 않습니다.

Java 8을 다운로드 / 설정하기 전에 Java 8이 Android 개발 용으로 지원되거나 지원되지 않는다는 "공식"문서를 참조 할 수 있습니다.


자바 8

Android는 모든 Java 7 언어 기능과 플랫폼 버전에 따라 달라지는 Java 8 언어 기능의 하위 집합을 지원합니다.

Java 8의 어떤 기능이 지원되는지 확인하려면

Java 8 언어 기능 사용

Java 8 언어 기능에 대한 지원을 현재 javac 및 dx 도구 세트에 직접 추가하고 Jack 도구 체인을 더 이상 사용하지 않기로 결정했습니다. 이 새로운 방향으로 Java 클래스 파일 형식에 의존하는 기존 도구 및 플러그인이 계속 작동해야합니다. 앞으로 Java 8 언어 기능은 Android 빌드 시스템에서 기본적으로 지원됩니다. 앞으로 몇 주 안에 Android Studio의 일부로 출시 할 예정이며,이 결정을 일찍 알려 드리고자합니다.

Android에서 Java 8 언어 기능 지원의 미래

Eclipse 사용자 :

Eclipse를 선호하는 이전 개발자를 위해 Google은 Eclipse Android 개발자 도구를 지원하지 않습니다.

Java 8 JDK를 설치 한 경우 시도해보고 문제가 발생하면 창 메뉴 → 환경 설정JavaCompiler 에서 Eclipse에서 컴파일러를 1.6으로 설정하십시오 . Java 7도 작동합니다.

Eclipse 환경 설정-> Java-> 컴파일러

Android 5.0 이상을 대상으로하는 경우 Java 7 이상이 필요합니다.

여러 JDK를 설치하고 시도하십시오.


업데이트 2017/11/04-이제 Android Studio 3.0에서 Java 8에 대한 기본 지원 gradle-retrolambda 이 더 이상 필요하지 않습니다. 참조 https://developer.android.com/studio/write/java8-support.html를

을 사용하는 경우 위 링크에는 마이그레이션 지침도 포함되어 있습니다 gradle-retrolambda. 아래의 원래 답변 :


Android는 Java 8을 지원하지 않습니다. 최대 Java 7 (kitkat이있는 경우) 만 지원하며 invokedynamic은없고 새로운 구문 설탕 만 지원합니다.

Android에서 Java 8의 주요 기능 중 하나 인 람다를 사용하려면 gradle-retrolamba를 사용할 수 있습니다 . Java 8 바이트 코드를 Java 6/7로 다시 변환하는 도구 인 retrolambda를 통합하는 gradle 빌드 종속성입니다. 기본적으로 Java 8 바이트 코드를 컴파일하도록 Android Studio에서 컴파일러를 설정하여 람다를 허용하면 Java 6/7 바이트 코드로 다시 변환 된 다음 다시 dalvik 바이트 코드로 변환됩니다. 공식 지원 대신 Android에서 일부 JDK 8 기능을 사용 해보고 싶다면 해킹입니다.


실제로 gradle-retrolambagradle 빌드 종속성을 사용하여 Android 개발 용 Java 8을 사용할 수 있습니다 .

아래는 최근에 Android 개발을 위해 람다 식을 실행하기 위해 따라온 완전한 가이드입니다. 이 가이드의 원본 소스는 마지막에 언급되어 있습니다.

이 가이드에서는 일부 Java 8 기능을 Android 개발 도구로 가져 오는 방법 , 특히 Eclipse IDE를 대상으로하는 방법을 보여줍니다 . 그러나이 가이드에서 설명 할 단계는 Google의 새로운 개발 환경 인 Android Studio에도 적용될 수 있습니다. JetBrains의 인기있는 IntelliJ Idea IDE의 커뮤니티 에디션을 기반으로하며 최근이 가이드가 작성되기 조금 전인 2014 년 7 월 초에 Google에서 '베타'버전으로 업그레이드했습니다. 이클립스는 적어도 당분간 눈에 띄는 개발 환경으로 남아있을 것이며 대부분의 Android 프로젝트가 이클립스를 사용하여 개발되었다는 사실을 고려할 때 람다 표현식과 같은 새로운 Java 8 기능을 ADT로 가져 오는 방법은 개발자에게 매우 유용 할 것 같습니다.

Android 개발은 2011 년에 종료 된 Apache Harmony Project라는 사용자 지정 Java 구현을 기반으로합니다. Android 개발에서 가장 일반적으로 사용되는 Java 구문은 Java 6 (v1.6)이고 Java 7 (v1.7)도 부분적으로 지원됩니다. KitKat 에디션 (Android 4.4. +). 따라서 람다 식과 같은 Java 8 기능은 개발 도구에 약간의 조정을 적용하지 않고 Android 앱 개발에서 직접 사용할 수 없습니다. 운 좋게도 이러한 구조는 기본적으로 개발자에게 '익명 클래스'와 같은 단점을 제공하는 일부 '구문 설탕'향상이며 Java 6 또는 Java 7 클래스로 변환 될 수 있습니다.

Java 8 소스 코드를 하위 Java 버전으로 변환하는 최근 접근 방식을 RetroLambda 라고 합니다 . 이 라이브러리를 사용하면 개발자가 Java 7 이하에서 람다 식으로 Java 8 코드를 실행할 수 있습니다. 불행히도 람다 식 이외의 Java 8 기능은 현재 RetroLambda에서 지원되지 않지만 람다 식의 개념은 Java 8 플랫폼에서 가장 큰 도약이며 어쨌든 Android 개발자에게 훌륭한 도구입니다.

이 라이브러리에 대한 자세한 내용은 GitHub 페이지에서 찾을 수 있습니다.

https://github.com/orfjackal/retrolambda#getting-started

또한 다른 개발자가 만든 RetroLambda 용 Gradle 플러그인을 사용하면 Gradle 기반 빌드를 Java 또는 Android 프로젝트에서 구현할 수 있습니다. 그러나 개발자는이 플러그인을 Android Studio 환경에 통합하는 것에 대해서만 언급합니다. 자세한 내용은 GitHub 페이지에서 확인할 수 있습니다.

https://github.com/evant/gradle-retrolambda

Eclipse 기반 개발 환경에서 이러한 인프라를 사용하는 것은 직접적으로 접근 할 수 없지만 가능하며이 가이드 전체에서 설명합니다.

예비

이 가이드는 독자가 Android 개발에 대한 기본적인 이해를 가지고 있으며 ADT 버전 22.6.2를 기반으로한다고 가정합니다. 최신 ADT 버전 23.0.2는 레이아웃 폴더 생성과 같은 문제가있는 것 같습니다. 이 문제에 대한 자세한 내용은 다음 링크에서 찾을 수 있습니다.

http://code.google.com/p/android/issues/detail?id=72591

이 가이드의 단계는 Windows 8.1, 64 비트 개발 컴퓨터 용으로 제공되지만 다른 플랫폼에도 쉽게 적용 할 수 있습니다. 새로운 빌드 시스템 Gradle은 빌드 / 클린 프로세스에 사용되며 설치 절차도 제공됩니다. 또한, 모두 JDK 8JDK 7개발 시스템에 공존해야합니다. 설치하려면 아래 단계를 따라야합니다.

  • JDK 8 얼리 액세스 미리보기 페이지 http://jdk8.java.net로 이동
  • JDK 8u20을 다운로드하여 설치하십시오. JRE 8 설치가 필요하지 않으며 건너 뛸 수 있습니다.
  • JDK 7 최신 안정 릴리스 페이지 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html로 이동
  • JDK 7u65를 다운로드하여 설치하십시오. JRE 7 설치는 다시 필요하지 않으며 건너 뛸 수 있습니다.
  • 변수에 JDK 8 홈 폴더 및 JDK 8 bin폴더 추가%PATH%
  • JAVA_HOMEJDK 8 홈 폴더의 경로 값으로 새 환경 변수 만듭니다.
  • JAVA8_HOMEJDK 8 홈 폴더의 경로 값으로 새 환경 변수를 다시 만듭니다.
  • JAVA7_HOMEJDK 7 홈 폴더의 경로 값으로 새 환경 변수 만듭니다.
  • 터미널 창을 열고 java -version명령을 실행하고 Java 8이 실행 되고 있는지 확인합니다.
  • javac -version동일한 창에서 명령을 실행 하고 JDK 8 Java 컴파일러도 실행되고 있는지 확인합니다.

이제 다음 링크에서 ADT-22.6.2를 다운로드해야합니다.

http://dl.google.com/android/adt/22.6.2/adt-bundle-windows-x86_64-20140321.zip

  • ADT를 다운로드하고 그 내용을 폴더에 압축을 풉니 다. 예 : D:\adt
  • ANDROID_HOMEADT 설치 폴더의 경로 값으로 호출되는 새 환경 변수를 정의 합니다. 예 :D:\adt\sdk
  • Andoid SDK Platform ToolsAndoid SDK Tools폴더 (예 : D:\adt\sdk\toolsD:\adt\sdk\platform-tools)를 %PATH%변수에 추가하십시오.
  • 원하는 경우 Eclipse IDE에 대한 바로 가기를 만듭니다. ADT 설치 폴더 아래에 있습니다. 예 :D:\adt\eclipse
  • Eclipse IDE를 실행하고 작업 공간을 만듭니다. 예 : D:\adt\workspace
  • Android SDK Manager도구 모음 에있는 버튼을 클릭합니다.
  • 선택 Android SDK Build tools Rev. 19.1하고 Android Support Library만. 다른 모든 항목을 선택 취소하고이 두 패키지를 설치하십시오.

모든 것이 잘되면 ADT가 실행됩니다.

다음 도구도 설치하는 것이 좋습니다.

  • Eclipse Kepler Java 8 지원 : Eclipse가 새로운 Java 8 구문 확장을 인식하도록하고 red dotsJava 코드 편집기에서 성가신 문제를 제거 합니다. Help -> Install New SoftwareEclipse를 통해 설치할 수 있습니다 . 필드에 http://download.eclipse.org/eclipse/updates/4.3-P-builds/입력 Work with하고 계속 설치하십시오.

  • Nodeclipse / Enide Gradle : 주로 Groovy 언어 키워드를 강조하는 데 사용됩니다. Groovy는 Gradle 빌드 스크립트의 DSL로 사용됩니다. 이 플러그인은를 통해 설치할 수 있습니다 Eclipse Marketplace. 그러나 ADT-22.6.2 내의 Eclipse는 Eclipse Marketplace Client. 따라서, 먼저 설치해야합니다 Eclipse Marketplace Client의해 Install New Software이클립스 도구입니다. 필드에 http // : download.eclipse.org/mpc/kepler/를 입력 Work with하고 계속 설치하십시오. 을 설치 한 후 에서 Eclipse Marketplace Client검색하여 설치할 수 있습니다.Nodeclipse/Enide GradleEclipse Marketplace Client

  • Genymotion 가상 장치 : Android Virtual DeviceADT와 함께 제공 되는 기본값 대체합니다 . AVD는 성가 시게 번거롭고 이유없이 계속 충돌합니다. Genymotion을 사용하면 Oracle VirtualBox에서CyanogenMod 실행되는 이미지를 사용하여 Android VD를 준비 할 수 있습니다 . 단일 사용자 라이센스는 무료이며 http://www.genymotion.com 에서 다운로드 할 수 있습니다 . 로그인 만 필요하며 Eclipse에 통합 할 수도 있습니다. 자세한 내용은 다음에서 찾을 수 있습니다.

https://cloud.genymotion.com/page/doc/#collapse8

아래는 Android 4.3 기반 CyanogenMod 가상 기기의 스크린 샷입니다.

여기에 이미지 설명 입력

x86 또는 x64 기반 개인용 컴퓨터에서 실행되는 완전한 Android 장치로 간주 될 수 있습니다. Google PlayStore이 가상 기기에서 와 같은 Google 서비스를 사용하려면 사용 gapps하는 Android 버전 용 이미지를 기기에 플래시해야합니다. gapps장치에 대한 적절한 이미지는 CyanogenMod 웹 사이트에서 다운로드 할 수 있습니다.

http://wiki.cyanogenmod.org/w/Google_Apps

Gradle 설치는 Android SDK 자체에서도 제공되므로 선택 사항이지만 별도로 설치하는 것이 좋습니다. 다음 단계에 따라 설치를 수행 할 수 있습니다.

  • Gradle 웹 사이트로 이동 : http://www.gradle.org/

  • 딸깍 하는 소리 Downloads

  • 아래에서 Previous Releases버전 1.10 다운로드를 선택하거나 gradle-1.10-all.zip 또는 gradle-1.10-bin.zip
  • 내용을 폴더에 압축 해제합니다. 예 : D:\adt\gradle
  • GRADLE_HOMEGradle 설치 폴더의 경로 값으로 호출되는 새 환경 변수를 정의 합니다. 예 :D:\adt\gradle
  • 예를 들어, 당신의 Gradle을 바이너리 폴더를 추가, D:\adt\gradle\bin당신에, %PATH%변수
  • 터미널 창을 열고 gradle -v명령을 실행하고 실행 중인지 확인합니다.이 시점에 성공적으로 도달했다면 Java 8 기능을 사용하여 첫 번째 Android 앱을 만들 준비가되었음을 의미합니다.

데모 앱

이전 섹션에서 설명한 도구의 사용법을 보여주기 위해 간단한 앱이 생성됩니다. 아래 단계에 따라 Android 개발자 도구에서 람다 식 사용에 대한 통찰력을 얻을 수 있습니다.

  • Eclipse IDE를 실행하고 다음을 선택하여 새 Android 앱을 만듭니다. File -> New -> Other -> Android -> Android Application Project
  • 다음과 같이 나타나는 양식을 작성하십시오.

여기에 이미지 설명 입력

  • Next다음 양식의 Finish버튼을 클릭 하고 마지막 양식 버튼을 클릭하기 만하면 됩니다. ADT가 프로젝트로드를 마칠 때까지 기다리십시오.
  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 선택 New -> Folder하고 이름을 지정합니다.builders
  • gen (Generated Java Files)폴더를 마우스 오른쪽 버튼으로 클릭 하고 삭제하십시오. Gradle은 곧 동일한 파일을 생성 할 것이며 s build path. The기본 Ant 빌더로 생성 된 프로젝트 생성 폴더에 추가 할 예정 이며 더 이상 필요하지 않으며 해당 폴더 아래의 아티팩트는 더 이상 사용되지 않습니다.
  • builders폴더 아래에 다음 배치 파일을 만듭니다 .

    • gradle_build.cmd
    • gradle_post_build.cmd
    • gradle_clean.cmd
  • 이러한 배치 파일을 다음과 같이 채우십시오.

gradle_build.cmd :

여기에 이미지 설명 입력

gradle_post_build.cmd :

여기에 이미지 설명 입력

gradle_clean.cmd :

여기에 이미지 설명 입력

  • Project -> Build Automatically메뉴 옵션 선택 취소
  • 프로젝트를 마우스 오른쪽 단추로 클릭 Properties -> Builders하고 ADT에서 제공하는 모든 기본 빌더를 선택 및 선택 취소하십시오.
  • 클릭 New같은 창에서 버튼을 선택 Program하고 클릭OK
  • 새 빌더 구성 창이 나타납니다. 다음과 같이 탭을 채우십시오.

Main 새 빌더 구성 탭

여기에 이미지 설명 입력

Refresh 새 빌더 구성 탭

여기에 이미지 설명 입력

Environment 새 빌더 구성 탭

여기에 이미지 설명 입력

Build Options 새 빌더 구성 탭

여기에 이미지 설명 입력

  • 프로그램으로 Gradle_Post_Build사용 하는 두 번째 빌더를 작성하십시오 gradle_post_build.cmd. 이 빌더의 다른 모든 설정은 이전에 작성된 빌더와 정확히 동일해야합니다. 이 빌더는 빌드 프로세스에서 생성 된 아티팩트를 bin폴더에 복사합니다.
  • 프로그램으로 Gradle_Cleaner사용 하는 세 번째 빌더를 작성하십시오 gradle_clean.cmd. Run the builder마지막 탭의 설정 만으로 설정해야합니다 During a Clean. 이 빌더의 다른 모든 설정은 첫 번째 빌더와 정확히 동일해야합니다. 이 빌더는 이름에서 알 수 있듯이 빌드 프로세스에서 생성 된 아티팩트를 정리합니다.

HelloLambda프로젝트 의 새로운 빌더

여기에 이미지 설명 입력

  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Export
  • 선택 Android -> Generate Gradle Build Files하고 클릭Next
  • 다음 창에서 프로젝트를 선택하고 Finish
  • 프로젝트의 루트 폴더로 이동하여 파일 gradlewgradlew.bat. gradle폴더 도 삭제
  • Eclipse로 다시 전환하고 Project -> Clean메뉴 옵션을 선택하십시오 . 다음과 같이 표시되는 양식을 작성하십시오.

Clean Project 창문

여기에 이미지 설명 입력

  • OK청소 프로세스가 완료 될 때까지 클릭 하고 기다립니다.
  • 클래스의 setContentView함수 호출 직후 아래에 제공된 Java 코드 스 니펫을 추가하십시오 MainActivity.

여기에 이미지 설명 입력

  • 다음과 같이 섹션 build.gradle까지 파일 의 시작 부분을 변경합니다 sourceCompatibility.

여기에 이미지 설명 입력

  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Properties -> Java Compiler옵션을 선택하고 모든 준수 수준을 Java 8로 설정합니다. 그러면 Eclipse가 람다 식과 같은 새로운 Java 8 구조를 인식하게됩니다.
  • No알림 창을 클릭하십시오 .
  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하고을 선택 Build project합니다. Eclipse가 프로젝트 빌드를 시작합니다.

빌드 프로세스 여기에 이미지 설명 입력

  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하고로 이동합니다 Properties -> Java Build Path. 빌드 경로에 다음 폴더를 추가합니다 (아래 이미지에도 표시됨).

    • build\source\buildConfig\debug
    • build\source\r\debug

여기에 이미지 설명 입력

Eclipse는 이제 인식 할 수있을 것입니다 R.javabuildConfig.java파일과는 표시되지 않습니다 red dots프로젝트의 리소스 파일에 관련되는 나타낸다 오류.

  • Run Configuration프로젝트를 마우스 오른쪽 버튼으로 클릭 한 다음을 선택하여 Android 대상 플랫폼에 대한 새 항목 만듭니다 Run As -> Run Configurations. 예를 들어이 데모 애플리케이션은 Genymotion VD에서 아래와 같이 보입니다.

HelloLambda 애플리케이션

여기에 이미지 설명 입력

당신은에서 관찰 할 수 LogCat있는 간단한 람다 식으로 코드가 제대로 작동하는지 창

여기에 이미지 설명 입력

출처 : Android 개발자 도구에서 Java 8 Lambda 표현식 사용


새로운 업데이트를 보려면이 링크를 따르십시오. Java 8 언어 기능 사용

이전 답변

현재 안드로이드 N 미리보기 릴리스 안드로이드 지원 제한 의 기능 자바 8 참조 자바 8 언어 특징

이러한 기능을 사용하려면 Android Studio 2.1 및 Android N Preview SDK 를 다운로드하고 설정해야합니다 . 여기에는 필수 Jack 도구 모음과 Gradle 용 업데이트 된 Android 플러그인 이 포함되어 있습니다. Android N Preview SDK를 아직 설치하지 않은 경우 Android N 용 개발 설정을 참조 하십시오 .

지원되는 Java 8 언어 기능 및 API

Android는 현재 모든 Java 8 언어 기능을 지원하지 않습니다. 그러나 이제 Android N Preview를 대상으로하는 앱을 개발할 때 다음 기능을 사용할 수 있습니다.

기본 및 정적 인터페이스 방법

Lambda 표현식 (API 레벨 23 이하에서도 사용 가능)

반복 가능한 주석

메서드 참조 (API 레벨 23 이하에서도 사용 가능)

Android가 지원하는 몇 가지 추가 Java 8 기능이 있습니다. Java 8 언어 기능 에서 자세한 내용을 볼 수 있습니다.

최신 정보

참고 : Android N은 익명 클래스를 기반으로 람다 식을 구현합니다. 이 접근 방식을 통해 이전 버전의 Android에서 이전 버전과 호환되고 실행할 수 있습니다. 이전 버전에서 람다 식을 테스트하려면 build.gradle 파일로 이동하고 compileSdkVersion 및 targetSdkVersion을 23 이하로 설정해야합니다.

업데이트 2

이제 Android 스튜디오 3.0 안정 릴리스는 Java 8 라이브러리 및 Java 8 언어 기능 (Jack 컴파일러 제외)을 지원합니다.


예, Android는 현재 Java 8 (24.1.17)을 지원합니다.

이제 가능합니다

그러나 당신은 당신의 장치 ROM을 자바 1.8에서 실행하고 그것을 실행하기 위해 "jackOptions"를 활성화해야 할 것입니다. Jack은 Java 8을 실행하는 새로운 Android 컴파일러의 이름입니다.

https://developer.android.com/guide/platform/j8-jack.html

이 줄을 build_gradle에 추가하십시오.

    android {
  ...
  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Java 8은 Android Studio 2.0의 Java 엔진을 실행하는 것 같지만 확인한 후에도 여전히 Java 8의 구문을 허용하지 않으며 현재 Android Studio에서 컴파일러를 선택할 수 없습니다. 그러나 Android 클라이언트에서 기능적 프로그래밍 메커니즘이 필요한 경우 scala 플러그인을 사용할 수 있습니다.

여기에 이미지 설명 입력


Android는 Java 6에서 분기되는 Java를 사용합니다.

Android SDK 버전 19부터 이렇게하면 Java 7 기능 사용할 수 있습니다 . Java 8을 완전히 지원하지는 않습니다 (아직).


Android는 Android N부터 Java 8을 공식적으로 지원합니다.

기능 발표는 여기 , Java 8 언어 발표는 다음과 같습니다.

향상된 Java 8 언어 지원 -Java 8 언어 기능을 Android에 도입하게되어 기쁩니다. Android의 Jack 컴파일러를 사용하면 이제 Gingerbread까지 거슬러 올라가는 Android 버전에서 람다 등을 포함한 많은 인기있는 Java 8 언어 기능을 사용할 수 있습니다. 새로운 기능은 상용구 코드를 줄이는 데 도움이됩니다. 예를 들어 람다는 이벤트 리스너를 제공 할 때 익명 내부 클래스를 대체 할 수 있습니다. 기본 및 정적 메서드, 스트림 및 기능 인터페이스와 같은 일부 Java 8 언어 기능도 이제 N 이상에서 사용할 수 있습니다. Jack과 함께 우리는 이전 버전과의 호환성을 유지하면서 Java 언어를 더 자세히 추적 할 수 있기를 기대합니다.


네이티브 자바 8이 안드로이드에 도착했습니다! 드디어!

각 모듈의 build.gradle 파일에서 Retrolambda 플러그인 및 retrolambda 블록을 제거합니다.

Jack을 비활성화하고 기본 도구 모음으로 전환하려면 모듈의 build.gradle 파일에서 jackOptions 블록을 제거하면됩니다.

지원되는 Java 8 언어 기능을 사용하려면 Android 플러그인을 3.0.0 이상으로 업데이트하세요.

Android Studio 3.0부터 Java 8 언어 기능이 이제 Android에서 기본적으로 지원됩니다.

  • 람다 식
  • 메서드 참조
  • 유형 주석 (현재 유형 주석 정보는 런타임에 사용할 수 없지만 컴파일 시간에만 사용할 수 있음)
  • 반복되는 주석
  • 기본 및 정적 인터페이스 메서드 (API 레벨 24 이상, 즉석 실행 지원 없음)

또한 최소 API 레벨 24부터 다음 Java 8 API를 사용할 수 있습니다.

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType (클래스)
  • java.lang.reflect.Method.isDefault ()

다음 줄을 애플리케이션 모듈의 build.gradle에 추가하여 프로젝트에 언어 수준을 알립니다.

 android {
   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }

gradle.properties 파일에 다음을 추가하여 Java 8 언어 기능에 대한 지원을 비활성화 합니다.

android.enableDesugar=false

끝났습니다! 이제 네이티브 java8을 사용할 수 있습니다!


다음을 사용하여 Java 8을 사용할 수 있습니다.

  1. build.gradle (프로젝트 : myProject)에서 다음을 추가하십시오.

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
    
  2. build.gradle (Module : myModule)에서 다음을 추가하십시오.

    apply plugin: 'me.tatarka.retrolambda'
    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    

Android Studio 3.0은 다음과 같은 일부 Java 8 언어 기능에 대한 기본 지원을 제공하기 시작했습니다.

  • 람다 식
  • 메서드 참조
  • 유형 주석 (정보는 컴파일 타임에 사용할 수 있지만 런타임에는 사용할 수 없음)
  • 반복되는 주석
  • 기본 및 정적 인터페이스 방법

또한 API 레벨 24부터 다음 Java 8 API를 사용할 수 있습니다.

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
  • java.lang.reflect.Method.isDefault()

그 외에도 try-with-resources모든 Android API 수준으로 지원이 확장되었습니다.

앞으로 더 많은 Java 8 기능이 추가 될 예정입니다.

지원되는 Java 8 언어 기능 사용을 시작하려면 Android 플러그인을 3.0.0-alpha1 이상으로 업데이트하고 모듈의 build.gradle 파일에 다음을 추가합니다.

android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

자세한 내용은 https://developer.android.com/studio/write/java8-support.html을 방문하십시오.


쉬운 방법

Android 프로젝트에 대한 Java 1.8 지원을 활성화 할 수 있습니다.

  • 프로젝트 구조 열기

    • 눌러서 Ctrl + Shift + Alt + S

    • 또는 File > Project Structure

  • 표시된대로 프로젝트 구조 대화 상자에서 소스 호환성대상 호환성1.8업데이트 하십시오 (파일> 프로젝트 구조 클릭).

영상

또는 gradle을 사용할 수 있습니다.

 android {
   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }

프로젝트 동기화. 그리고 그게 다야!

참고 : Android 스튜디오 3.0.0 이상에서 Java 1.8 지원을 사용 설정할 수 있습니다 . 자세한 내용은 문서참조하십시오 .


거의 2 년 전에이 질문을했을 때 대답은 실제로 "공식적으로"아니오였습니다.하지만 ekcr1의 대답에서 지적했듯이 retrolamba를 사용하면 가장 기대되는 기능 (람다) 중 하나를 사용할 수 있습니다. 당시에는 Android Studio가 "미리보기"모드에 있었기 때문에 이클립스를 사용하고 있었기 때문에이 경로를 추구 한 적이 없었습니다.

오늘날 저는 "공식적인"대답은 여전히 ​​아니요라고 생각하며 retrolamba는 여전히 좋은 방법으로 보이지만 다소 "비공식적 인"경로를 기꺼이 내려갈 수있는 또 다른 옵션, 즉 Kotlin이 있습니다.

오늘 Kotlin은 1.0.0에 도달했습니다. Kotlin에 익숙하지 않은 사용자는 다음 웹 사이트에서 더 많은 정보를 찾을 수 있습니다.

https://kotlinlang.org

또는 Jake Wharton이 전한 강연의이 utube 비디오를보십시오.

https://www.youtube.com/watch?v=A2LukgT2mKc


최근 뉴스:

Google은 Android N 및 Android Studio 2.1 이상에서 플랫폼이 Java 8을 지원한다고 발표했습니다. 또한 안정적인 버전의 Studio 2.1이 출시되었습니다.

마침내 우리는 람다 식을 사용할 수 있습니다. for 루프에 더 이상 목록 필터가 없습니다. 호 레이.


이 구성 build.gradle을 추가하고 gradle을 동기화하십시오.

android {
    ...
    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        // or
        //sourceCompatibility 1.8
        //targetCompatibility 1.8
    }
}

Google은 Java 8이 Android에서 기본적으로 지원되며 Jack 도구 모음이 더 이상 사용되지 않는다고 발표했습니다.

Java 8 언어 기능에 대한 지원을 현재 javac 및 dx 도구 세트에 직접 추가하고 Jack 도구 체인을 더 이상 사용하지 않기로 결정했습니다. 이 새로운 방향으로 Java 클래스 파일 형식에 의존하는 기존 도구 및 플러그인이 계속 작동해야합니다. 앞으로 Java 8 언어 기능은 Android 빌드 시스템에서 기본적으로 지원됩니다. 앞으로 몇 주 안에 Android Studio의 일부로 출시 할 예정이며,이 결정을 일찍 알려 드리고자합니다.

자세한 정보 : https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html


예. 곧 Java 8을 사용할 것입니다!

Java 8 언어 기능에 대한 지원을 현재 javac 및 dx 도구 세트에 직접 추가하고 Jack 도구 체인을 더 이상 사용하지 않기로 결정했습니다. 이 새로운 방향으로 Java 클래스 파일 형식에 의존하는 기존 도구 및 플러그인이 계속 작동해야합니다. 앞으로 Java 8 언어 기능은 Android 빌드 시스템에서 기본적으로 지원됩니다. 앞으로 몇 주 안에 Android Studio의 일부로 출시 할 예정이며,이 결정을 일찍 알려 드리고자합니다.

https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html


이 줄을 모듈 lvl build gradel에 추가했습니다.

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }


Stack Overflow에서 비슷한 질문대한 비슷한 답변썼지 만 여기에 그 답변의 일부가 있습니다.

Android 스튜디오 2.1 :

새 버전의 Android Studio (2.1)는 Java 8 기능을 지원합니다. 다음은 Android 개발자 blogspot 게시물 에서 발췌 한 것입니다 .

... Android Studio 2.1 릴리스에는 새로운 Jack 컴파일러Java 8 지원이 포함됩니다 .

...

N Developer Preview로 개발할 때 Java 8 언어 기능을 사용하려면 Jack 컴파일러를 사용해야합니다. New Project Wizard [File → New → Project]는 N을 대상으로하는 프로젝트에 대한 올바른 구성을 생성합니다.


Android Studio 2.1 이전 :

Android는 아직 Java 1.8을 지원하지 않으므로 (최대 1.7까지만 지원) 람다와 같은 Java 8 기능을 사용할 수 없습니다.

이 답변은 Android Studio의 호환성에 대한 자세한 내용을 제공합니다 . 그것은 말한다 :

Android에서 Java 8의 주요 기능 중 하나 인 람다를 사용하려면 gradle-retrolamba를 사용할 수 있습니다.

사용에 대한 자세한 내용을 알고 싶다면 gradle-retrolambda, 이 대답은 그 일에 많은 세부를 제공합니다 .


나는 좀 더 최신의 것을 찾는 사람들을 위해 업데이트 된 답변을 게시 할 것이라고 생각했습니다.

현재 Android 및 Android Studio는 Java 8 기능의 하위 집합을 지원합니다. 웹 사이트에 있는 Android 문서에 따르면 Google은 다음과 같이 말합니다.

Java 8 언어 기능을 지원하려면 Jack이라는 새 컴파일러가 필요합니다. Jack은 Android Studio 2.1 이상에서만 지원됩니다. 따라서 Java 8 언어 기능을 사용하려면 Android Studio 2.1을 사용하여 앱을 빌드해야합니다.

Android Studio가 이미 설치되어있는 경우 Help> Check for Update (Mac의 경우 Android Studio> Check for Updates)를 클릭하여 최신 버전으로 업데이트하십시오. 워크 스테이션에 IDE가 아직 설치되어 있지 않은 경우 여기에서 Android Studio를 다운로드하십시오.

지원되는 Java 8 언어 기능 및 API

Android는 모든 Java 8 언어 기능을 지원하지 않습니다. 그러나 Android 7.0 (API 레벨 24)을 대상으로하는 앱을 개발할 때 다음 기능을 사용할 수 있습니다.

  • 기본 및 정적 인터페이스 메서드 Lambda 표현식 (API 레벨 23 이하에서도 사용 가능)
  • 반복 가능한 주석
  • 메서드 참조 (API 레벨 23 이하에서도 사용 가능)
  • 유형 주석 (API 레벨 23 이하에서도 사용 가능)

또한 다음 Java 8 언어 API도 사용할 수 있습니다.

리플렉션 및 언어 관련 API :

  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • AnnotatedElement.getAnnotationsByType (Class)와 같이 반복 가능한 주석과 연관된 java.lang.reflect.Method.isDefault () 및 Reflection API

유틸리티 API :

  • java.util.function
  • java.util.stream

새로운 Java 8 언어 기능을 사용하려면 Jack 도구 모음 도 사용해야합니다 . 이 새로운 Android 도구 모음은 Java 언어 소스를 Android에서 읽을 수있는 DEX 바이트 코드로 컴파일하고 자체 .jack 라이브러리 형식을 가지며 대부분의 도구 모음 기능을 단일 도구의 일부로 제공합니다 : 재 패키징, 축소, 난독 화 및 멀티 덱스.

다음은 Android DEX 파일을 빌드하는 데 사용되는 두 도구 모음을 비교 한 것입니다.

Legacy javac toolchain:
    javac (.java → .class) → dx (.class → .dex)
    New Jack toolchain:
    Jack (.java → .jack → .dex)

나는이 질문을 3 년 전에 물었고 분명히 대답은 수년에 걸쳐 바뀌 었습니다. 위의 많은이 이미 대답 것처럼, 언젠가 다시 현재로, 대답은되었다 . 당시 정답 이었기 때문에 수락 된 답변을 업데이트 한 적이 없습니다. (스택 오버플로 정책이 무엇인지 잘 모르겠습니다.)

이 주제를 여전히 검색하는 사람들을 위해 다른 답변을 추가하고 싶었습니다. 2017 년 5 월 17 일부로 Google은 KotlinAndroid 개발을위한 공식 언어 이기도한다고 발표했습니다 .

공식 보도 자료를 찾지 못했지만 발표 된 Google I / O 동영상 일부를 시청 했습니다. 다음은 발표에 대한 Kotlin 팀 의 블로그 게시물 링크 입니다.


다음을 추가하면 문제가 해결되었습니다 (Android 스튜디오 2.3.2).

build.gradle (프로젝트)

buildscript {
repositories {
    ...
    jcenter()
}
dependencies {
    ...
    classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
    ...
   }
}

build.gradle (모듈 : 앱)

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' //PLUGIN

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    } // SET JAVA VERSION
    ...
}

이제 Android Studio에서 Java 8의 하위 집합이 지원됩니다. 아래 창에서 소스 및 타겟 호환성을 조정하면됩니다.

파일-> 프로젝트 구조

조정 창

자세한 정보는 아래 링크에 있습니다.

https://developer.android.com/studio/write/java8-support.html


위의 모든 솔루션은 최신 Android Studio 3.4 이상 에서 2019 년 에 작동하지 않는 것 같습니다 .

Android 프로젝트를 Java 8 로 마이그레이션하거나 업그레이드 할 수있는 완벽한 최신 솔루션을 찾았습니다 .

해결 방법 : 를 클릭하면 파일 -> 프로젝트 구조 -> 모듈 -> 속성 탭을 선택합니다.

변경 소스 호환성대상 호환성1.8 (자바 8)

여기에 이미지 설명 입력

참고 URL : https://stackoverflow.com/questions/23318109/is-it-possible-to-use-java-8-for-android-development

반응형