IT박스

Android 프로젝트에서 ThreeTenABP를 사용하는 방법

itboxs 2020. 6. 1. 19:24
반응형

Android 프로젝트에서 ThreeTenABP를 사용하는 방법


Java 및 Android를 처음 사용하기 때문에이 질문을하고 있으며 이것을 알아 내려고 몇 시간 동안 검색했습니다. 대답은 관련 답변의 조합에서 나왔으므로 어려움을 겪고있는 다른 사람에게 배운 것을 문서화 할 것이라고 생각했습니다. 답을보십시오.

Android Studio 2.1.2를 사용하고 있습니다. 내 Java 설정은 다음과 같습니다.

>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)

첫 번째 발견 : java.time , ThreeTen-Backport 또는 Joda-Time 대신 ThreeTenABP를 사용해야 하는 이유

이것은 새로운 표준을 정의하는 매우 긴 과정의 매우 짧은 버전입니다. 이 모든 패키지는 거의 동일합니다. Java를위한 현대적이고 우수한 시간 처리 기능을 제공하는 라이브러리입니다. 차이점은 미묘하지만 중요합니다.

가장 확실한 해결책은 내장 java.time패키지 를 사용하는 것입니다. 이것이 Java의 시간과 날짜를 처리하는 새로운 표준 방법이기 때문입니다. JSR 310 의 구현 으로, Joda-Time 라이브러리를 기반으로하는 시간 처리를위한 새로운 표준 제안이었습니다 .

그러나 Java 8java.time 에서 도입되었습니다 . Marshmallow 이하의 Android 는 Java 7에서 실행됩니다 ( "Android N"은 Java 8 언어 기능을 도입 한 첫 번째 버전입니다). 따라서 Android N Nougat 이상만을 대상으로하지 않는 한 Java 8 언어 기능을 사용할 수는 없습니다 (실제로 이것이 100 % 사실인지 확실하지 않지만 이것이 내가 이해하는 방법입니다). 그렇습니다 .java.time

다음 옵션은 JSR 310 이 Joda-Time을 기반으로 했기 때문에 Joda-Time수 있습니다 . 그러나 ThreeTenABP 추가 정보에서 알 수 있듯이 여러 가지 이유로 Joda-Time이 최선의 옵션이 아닙니다.

다음은 ThreeTen-Backport로 , Java 8 java.time기능 의 대부분 (일부는 아님) 을 Java 7로 백 포트합니다 . 이는 대부분의 사용 사례에 적합하지만 ThreeTenABP 추가 정보에 표시된대로 Android의 성능 문제가 있습니다.

따라서 마지막으로 올바른 옵션은 ThreeTenABP 입니다.

두 번째 발견 : 빌드 도구 및 종속성 관리

프로그램 (특히 많은 외부 라이브러리를 사용하는)을 컴파일하는 것은 복잡하기 때문에 Java는 거의 항상 "빌드 도구" 를 사용하여 프로세스를 관리합니다. Make , Apache Ant , Apache MavenGradle 은 모두 Java 프로그램과 함께 사용되는 빌드 도구입니다 ( 비교는 이 게시물 참조 ). 아래에서 언급했듯이 Gradle은 Android 프로젝트에 선택된 빌드 도구입니다.

이러한 빌드 도구에는 종속성 관리가 포함됩니다. Apache Maven은 중앙 집중식 패키지 저장소를 포함하는 최초의 것으로 보입니다. Maven은 Maven Central Repository를 도입하여 PHP composer와 Packagist, Ruby와 rubygems.org와 동등한 기능 gem을 제공합니다. 다시 말해, Maven Central Repository는 Packagist가 작곡가에 대해 Maven (및 Gradle)을위한 것입니다. 버전 화 된 패키지를위한 결정적이고 안전한 소스입니다.

세 번째 발견 : Gradle, Android 프로젝트의 종속성 처리

할 일 목록에서 가장 높은 것은 무료 전자 책을 포함하여 여기 에서 Gradle 문서를 읽는 것 입니다. 몇 주 전에 Android 학습을 시작했을 때 Gradle이 Maven Central Repository를 사용하여 Android 프로젝트의 종속성을 관리 할 수 ​​있다는 것을 알고 있었을 것입니다. 또한 StackOverflow 답변에 자세히 설명 된 것처럼 Android Studio 0.8.9부터 Gradle은 Bintray의 JCenter를 통해 Maven Central Repository를 암시 적으로 사용하므로 저장소를 설정하기 위해 추가 구성을 수행 할 필요가 없습니다. 의존성.

네 번째 발견 : 프로젝트 종속성이 [프로젝트 디렉토리] /app/build.gradle에 나열됩니다.

Java에서 Gradle을 사용한 경험이있는 사람들에게는 분명하지만 이것을 알아내는 데 시간이 걸렸습니다. "Oh, just add compile 'this-or-that.jar'"또는 이와 유사한 것을 말하는 사람들을 보게되면 compile컴파일 타임 종속성을 나타내는 build.gradle 파일의 지시어 라는 것을 알아야합니다 . 종속성 관리에 대한 공식 Gradle 페이지는 다음과 같습니다 .

다섯 번째 발견 : ThreeTenABP는 ThreeTen이 아니라 Jake Wharton에 의해 관리됩니다.

또 다른 문제는 알아내는 데 너무 많은 시간을 보냈습니다. 당신이 메이븐 중앙에 ThreeTen를 찾을 경우, 당신은 단지에 대한 패키지를 볼 수 있습니다 threetenbp, 없습니다 threetenabp. ThreeTenABPgithub 저장소 로 이동 compile 'this-or-that'하면 Readme의 다운로드 섹션 아래에 그 악명 높은 행이 표시됩니다.

이 github 저장소에 처음 도달했을 때, 나는 그 컴파일 라인이 무엇을 의미하는지 알지 못했고 터미널에서 실행하려고 시도했습니다 (명확하고 예측 가능한 실패). 내가 나머지를 파악하고, 마지막으로는 가리키는 메이븐 리포 라인의 실현 후 좌절, 나는 오래 될 때까지 돌아 오지 않았다 com.jakewharton.threetenabp받는 반대의 repo는, org.threetenREPO. 그래서 ThreeTenABP 패키지가 Maven 저장소에 없다고 생각했습니다.

요약 : 작동시키기

이제는 매우 쉬운 것처럼 보입니다. [project folder]/app/build.gradle파일 compile 'com.jakewharton.threetenabp:threetenabp:1.0.3'dependencies섹션 파일이 있는지 확인하여 Android 프로젝트에서 최신 시간 처리 기능을 사용할 수 있습니다 .

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "me.ahuman.myapp"
        minSdkVersion 11
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation 'junit:junit:4.12'
    implementation 'com.android.support:appcompat-v7:23.4.0'
    implementation 'com.android.support:design:23.4.0'
    implementation 'com.jakewharton.threetenabp:threetenabp:1.2.1'
}

또한 이것을 Application 클래스에 추가하십시오.

public class App extends Application {    
    @Override
    public void onCreate() {
        super.onCreate();
        AndroidThreeTen.init(this);
        //...
    }
}

gradle 파일에 다음을 추가하십시오.

/* android back port for java time  */
implementation 'com.jakewharton.threetenabp:threetenabp:1.2.1'

애플리케이션 클래스를 작성하고 초기화하십시오.

public class App extends Application {    
    @Override
    public void onCreate() {
        super.onCreate();
       AndroidThreeTen.init(this);
    }
}

참고URL : https://stackoverflow.com/questions/38922754/how-to-use-threetenabp-in-android-project

반응형