앱 을 100% Kotlin 으로 전환 한 결과

9026 단어 Android
코드 문자 가 쉽 지 않 습 니 다. 옮 겨 싣 기 는 다음 과 같 습 니 다.http://blog.csdn.net/u011176685/article/details/52673390
약서 블 로그:http://www.jianshu.com/users/88579080227b
주제: 국내 커 뮤 니 티 를 많이 돌아 다 니 면서 신선 함 을 잃 어가 고 있다.아마 많이 보 셨 을 거 예요............................................................................사실 제 가 쓴 '안 드 로 이 드 우수 자원 정리 모음 집' 에서 도 언급 했 습 니 다.관심 있 는 거 알 아 봐.돌아 다 니 면서 이 글 은 모두 가 사용 할 수 있 지만 언어 문제 로 인해 인내심 이 별로 없 을 것 이다.필요 한 학우 에 게 도움 이 되 기 를 바 랍 니 다.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
이것 은 Kotlin 의 일부분 일 뿐 입 니 다. 이 부분 을 클릭 하여 두 번 째 부분 을 보 세 요. 제 가 Kotlin 언어 디자인 에 대해 토론 하 는 곳 에서...
저 는 Kotlin 의 발전 에 관심 을 가 진 지 오래 되 었 습 니 다. Kotlin 은 JVM 을 바탕 으로 자바 와 호 환 되 는 새로운 프로 그래 밍 언어 입 니 다.Kotlin 버 전 1.0.2 가 발표 되면 서 가 져 온 증분 컴 파일 과 표준 라 이브 러 리 에서 대량으로 줄 이 는 방법 수량 에 따라 프로젝트 에서 사용 하고 싶 습 니 다.
저 는 Keepsafe 응용 잠 금 app 의 수석 엔지니어 입 니 다. 이 app 과 대부분의 안 드 로 이 드 응용 app 은 자바 언어 를 통 해 개발 되 었 습 니 다.자바 에는 현대 프로 그래 밍 언어 가 부족 한 점 이 많 습 니 다. 특히 안 드 로 이 드 는 자바 7 버 전 을 지원 합 니 다.이 문 제 를 해결 하기 위해 서 는 보통 라 이브 러 리 를 사용 합 니 다. 예 를 들 어 lambdas 와 자원 을 닫 기 위해 Retrolambda 를 사용 합 니 다. 가 변 집합 과 유효 함 수 를 위해 Guava 를 사용 합 니 다. view 의 바 인 딩 을 위해 ButterKnife 를 사용 하거나 함수 식 프로 그래 밍 을 위해 ReactiveX 를 사용 합 니 다.그러나 이러한 라 이브 러 리 도 단점 이 많 습 니 다. 의존 하 는 모든 라 이브 러 리 가 APK 에 방법 을 추가 하면 Retrolambda 는 항상 증분 구축 에 실패 합 니 다.
이 라 이브 러 리 가 있어 도 자바 코드 는 매우 불필요 하 다.90 년대 에 자바 의 디자이너 들 은 당신 의 코드 가 대량의 디자인 을 거 쳐 야 한 다 는 것 이 좋 은 생각 이 라 고 생각 했 지만 오늘 은 분명히 불필요 하 다.Kotlin 은 심사숙고 한 문법 과 광범 위 한 표준 라 이브 러 리 를 제공 하여 자바 에 존재 하 는 많은 통 증 을 없 앴 다.그래서 며칠 동안 의 노력 끝 에 저 는 앱 Lock 프로그램 전체 가 앱 을 잠 그 는 코드 를 Kotlin 으로 바 꾸 었 습 니 다.여 기 는 내 가 전환 하 는 과정 에서 의 생각 과 총 결 이다.
Kotlin vs Java in App Lock
将APP转换成100%Kotlin总结_第1张图片
App Lock 에서 Kotlin 으로 전환 한 후 방법의 통계 입 니 다.dexcount gradle 이 플러그 인 에서 얻 은 것 입 니 다.
표준 라 이브 러 리 를 통 해 추 가 된 방법의 수 는 모두 가 Kotlin 으로 전환 하 는 관심 사 입 니 다.슈퍼 port library 와 GMS 같은 라 이브 러 리 는 많은 app 이 Dex 방법 에 대한 수량 제한 을 높 일 수 있 습 니 다. 위의 위험.재 작성 전후 에 저 는 dexcount gradle 플러그 인 을 사용 하여 방법 을 분해 합 니 다.최종 결 과 는 총 방법 수가 proguard 이후 5491 에서 4987 로 10% (GMS 와 appcompat 통 계 는 포함 되 지 않 음) 떨 어 진 것 으로 나 타 났 다.코드 수 는 자바 의 12371 줄 에서 Kotlin 의 8564 줄 로 30% 감소 했다.
app 은 자바 에서 Kotlin 으로 바 뀌 었 고 전체 방법 수 는 10% 감 소 했 으 며 전체 코드 줄 수 는 30% 감소 했다.
방법 수가 줄 어 든 결 과 는 Kotlin 자체 가 더욱 간결 한 언어 로 인해 발생 한 것 이자 예전 에 자바 에서 질 좋 은 라 이브 러 리 를 사용 하면 더 이상 필요 하지 않 을 것 이라는 사실 도 증명 한다.
Retrolambda
Retrolambda 는 여러 가지 방법 을 추가 한 lambda 에 자동 으로 익명 클래스 를 생 성 합 니 다.Kotlin 은 lambda 에 유용 합 니 다. 추가 적 인 방법 을 추가 하지 않 아 도 됩 니 다.
public inline fun  T.apply(block: T.() -> Unit): T { 
    block(); return this 
}

예 를 들 어 매우 유용 한 표준 라 이브 러 리 함수 응용
이런 방식 으로 호출 하 다
myObject.apply { /* modify myObject */ }

lambda 함수 호출 을 정의 할 때 익명 클래스 가 생 성 되 지 않 았 습 니 다. 이 호출 로 인해 추가 적 인 방법 이 추가 되 지 않 았 고 메모리 할당 도 발생 하지 않 았 습 니 다.사실 응용 함수 자 체 는 대부분의 Kotlin 표준 라 이브 러 리 내부 관련 함수 처럼 코드 를 컴 파일 하 는 과정 에서 하나의 방법 이 추가 되 지 않 습 니 다.
Guava
Guava 는 전체적으로 사용 하기 쉬 운 추가 적 인 장점 을 가 진 Kotlin 표준 라 이브 러 리 로 대체 되 었 다.Big Guava ComparisonChain 은 kotlin. com parisons 함수 에 의 해 일부 문자 로 대체 할 수 있 습 니 다.
// Guava

    ComparisonChain.start()

    .compareTrueFirst(lhs.isActive(), rhs.isActive())

    .compare(lhs.lastName(), rhs.lastName())

    .compare(lhs.firstName(), rhs.lastName())

    .result();

    //Kotlin

    compareValuesBy(lhs, rhs,

    {it.active},{it.lastName},{it.firstName})

Guava null - safety 에서 선택 할 수 있 는 클래스 가 Kotlin 에서 생 성 되 었 습 니 다. 。
// Guava
return Optional.of(value).or(defaultValue);

// Kotlin
return value ?: defaultValue

Guava 의 lazy fields 와 전제조건 류 도 Kotlin 의 표준 라 이브 러 리 로 대체 되 었 다.
// Guava

    private Supplier lazyField = Suppliers.memoize(

    () -> "value");

    public String getField() {

    return lazyField.get();

    }


    // Kotlin

    val field bylazy{"value"}

    // Guava

    Preconditions.checkNotNull(value, "error %s", arg);

    // Kotlin

    checkNotNull(value){"$arg"}

거의 모든 Guava 의 집합 류 는 Kotlin 에 존재 한다.Guava 의 모든 기능 에 도 불구 하고 전체 Kotlin 표준 라 이브 러 리 는 Guava 보다 단독으로 작 습 니 다.
ButterKnife
ButterKnife 는 여전히 Kotlin 에 사용 되 고 있 지만 Kotlin Android Extensions 는 view 를 연결 하 는 더욱 간결 한 방법 을 제공 합 니 다.Kotterkife 와 Anko 와 같은 다른 해결 방안 도 존재 하지만 현재 일반적인 xml 레이아웃 은 Kotlin Android Extensions 를 사용 하 는 것 이 view 를 처리 하 는 가장 좋 은 방법 이라는 것 을 알 게 되 었 습 니 다.Kotterkife 는 extensions 보다 더 많은 인용 이 필요 합 니 다.Anko 는 대량의 방법 을 추가 할 뿐만 아니 라, DSL 은 왕왕 비교적 복잡 하고 XML 보다 성능 이 낮다.
RxJava
RxJava 도 아주 좋 습 니 다. 저 는 App Lock 의 많은 곳 에서 사용 합 니 다.그러나 자바 의 안 드 로 이 드 에는 집합 기능 에 대한 방법 이 없 기 때문에 나 는 가끔 Rx자바 를 대체 품 으로 사용한다. 
Observable.from(collection)
    .filter(it -> it.isActive())
    .map(it -> it.size())
    .reduce((it, sum) -> it + sum)
    .toBlocking().single();

Kotlin 에서 다음 과 같이 바 꿀 수 있 습 니 다:
collection.filter { it.isActive() }
          .map { it.size() }
          .reduce { it, sum -> it + sum }

Kotlin 입문
만약 당신 이 이미 일정한 자바 기 초 를 가지 고 있다 면, Kotlin 을 배 우 는 것 은 매우 쉽다.Kotlin Koans 온라인 학습 을 통 해 reference documentation 으로 작성 할 수 있 습 니 다.Jake Wharton 도 Kotlin 의 유용 한 문법 적 기능 에 대한 설명 을 많이 해 주 셨 어 요. 。
Kotlin 에 대한 가장 좋 은 부분 은 자바 와 Kotlin 에서 직접 호출 할 수 있다 는 것 이다.그 러 니까 코드 라 이브 러 리 전 체 를 바 꿀 필 요 는 없어.나 는 네가 처음에 다시 쓴 단독 파일 부터 시작 할 것 을 건의 한다.IntelliJ 는 자바 에서 Kotlin 으로 자동 으로 전환 하 는 기능 을 가지 고 있 지만 잘못된 코드 가 자주 발생 합 니 다.따라서 더 좋 은 방법 은 프로 그래 밍 언어 에 익숙 할 때 까지 초고 부터 시작 하 는 것 이다.
일단 당신 이 일정한 기초 지식 을 갖 춘 후에 나 는 기 존의 자바 코드 에 의존 하고 이 를 Kotlin 으로 바 꾸 는 것 을 제안 합 니 다.안 드 로 이 드 위 에 있 는 fragment 의 activity ui 코드 는 실천 하기 좋 은 곳 입 니 다.의존 하지 않 는 종 류 를 선택 하 십시오. 작업 코드 에 만 관심 을 가 질 수 있 습 니 다. 인터페이스 가 변 하고 있 는 것 을 걱정 하지 않 아 도 됩 니 다.컴 파일 할 때 발생 하 는 문법 이나 표준 라 이브 러 리 문 제 를 빠르게 처리 할 수 있 도록 Kotlin 의 개방 을 유지 합 니 다.자바 를 Kotlin 으로 변환 하 는 대신 Kotlin 을 선택 하여 작성 할 수도 있 습 니 다.그러나 나 는 변 환 된 코드 에서 뚜렷 하지 않 은 문법 을 선택 하 는 것 이 백지 에서 알 아 내 는 것 보다 더 쉽다 는 것 을 발견 했다.대부분의 경우 자동 전환 은 좋 은 선택 이 고 문제 가 발생 하 는 곳 도 쉽게 해결 된다.
Kotlin 을 공부 하고 있 을 때 프로젝트 가 무 거 운 부담 을 견 디 지 못 하도록 명확 한 목적 이 필요 하 다.MVP 나 MVVM 같은 것 을 아직 사용 하지 않 았 다 면 같은 시간 에 공부 하려 는 것 은 걱정 하지 마 세 요.걱정 마 세 요. 사용 가능 한 Kotlin 라 이브 러 리 를 찾 을 수 없습니다.자바 와 Kotlin 전환 에 관 한 지식 에 만 관심 을 가 집 니 다.통 증 이 있다 면 라 이브 러 리 나 디자인 모드 를 더 추가 할 수 있 습 니 다.
코드 라 이브 러 리 를 한꺼번에 교체 해 야 합 니까?
코드 라 이브 러 리 에 많은 Kotlin 을 제공 한 후에 한 번 에 모두 Kotlin 으로 전환 할 지, 아니면 더 느 려 질 지 결정 해 야 합 니 다.다행히 Kotlin 은 자바 와 호 환 되 어 서로 통한다.너 는 단독 클래스 를 동시에 바 꿀 수도 있 고, 두 언어 가 함께 병존 하여 운행 할 수도 있다.
큰 코드 라 이브 러 리 에 대해 서 는 모든 것 을 정식 버 전 으로 바 꾸 는 데 많은 작업량 이 필요 합 니 다.Keepsafe 의 주요 app 에 서 는 이 글 을 쓸 때 까지 약 15% 의 코드 가 Kotlin 입 니 다. 이 프로그램 에서 자바 류 를 뚜렷하게 변경 해 야 한다 면 저 희 는 보통 Kotlin 으로 클래스 를 바 꾸 려 고 노력 하고 있 습 니 다.이것 은 우리 로 하여 금 새로운 특성 상 우리 의 일 을 늦 추 지 않 고 코드 라 이브 러 리 를 안정 적 으로 향상 시 킬 수 있 게 한다.
하지만 프로젝트 가 충분 하 다 면 100% Kotlin 으로 전환 할 수 있다 는 것 은 고려 할 만하 다.자바 의 호환성 을 유지 하지 않 아 도 내부 API 를 간소화 하고 제 가 앞에서 말 한 라 이브 러 리 를 많이 삭제 할 수 있 습 니 다.정적 도구 류 를 확장 기능 으로 변환 하고 Kotlin 의 더 강 한 유형 으로 추정 할 수 있 습 니 다.
최후 의 사고
Kotlin 은 위대 한 프로 그래 밍 언어 로 자바 에 대한 큰 개선 이다.App Lock 을 Kotlin 으로 변환 하여 app 을 더 빠 르 고 작 게 만 들 며 이전 보다 더 적은 bug 로 만 듭 니 다.Kotlin 언어 는 현재 이미 충분히 성숙 되 었 습 니 다. 어떤 도구, 언어, 표준 라 이브 러 리 에서 도 중요 한 기능 이 부족 하지 않 습 니 다.지금 Kotlin 을 시도 하고 있 는 지, 아니면 시간 을 기 다 려 야 하 는 지 알 고 싶다 면, 지금 Kotlin 은 전 직 생산 에 사용 할 준 비 를 하고 있다 는 것 을 알려 드릴 수 있 습 니 다.만약 당신 이 안 드 로 이 드 나 다른 자바 환경 을 사용 하 는 것 이 모두 Kotlin 이 일 할 수 있 는 곳 이 라면, 당신 은 자신 을 위해 Kotlin 을 시도 해 야 합 니 다.
                                                  ........................................
이것 은 Kotlin 시리즈 의 첫 번 째 문장 이다.Keepsafe Engineering 가 져 온 이후 더 많은 글 을 추천 합 니 다.Kotlin 사용 에 관심 이 있 습 니까?Keepsafe Kotlin 의 빈 자 리 를 보 세 요.
이 문장 을 번역 하 는 응답 을 보 세 요. 많 지 않 으 면 뒤에 작가 가 두 편의 문장 이 있 으 니 여러분 이 직접 보 셔 도 됩 니 다.만약 괜찮다 면, 나 는 뒤에 시간 을 내 서 다른 두 편도 번역 할 것 이다.번역 도 육체 노동 입 니 다. 저 는 먼저 물 을 한 잔 마시고 쉬 겠 습 니 다.
번역문:https://medium.com/keepsafe-engineering/lessons-from-converting-an-app-to-100-kotlin-68984a05dcb6#.eih952jr4
위 챗 공식 번호 에 관심 을 가지 고 안 드 로 이 드 심도 있 는 글 과 모 바 일 최첨단 기술 공유 에 전념 하 시 는 것 을 환영 합 니 다.
将APP转换成100%Kotlin总结_第2张图片

좋은 웹페이지 즐겨찾기