AOSP 결합 독립 응용 프로그램 요약

요약
본고는 Android Q를 바탕으로 AOSP의 창고를 독립된 응용으로 결합할 때의 의문점을 소개한다.
2. 소개
필자는 안드로이드 버전의 업그레이드를 맡았을 때 많은 어려움을 겪었기 때문에 이런 난점을 기록하는 것은 한편으로는 앞으로 스스로 되돌아보기 위해서이고 다른 한편으로는 동종 업계의 개발자를 돕기 위해서이다.
데이터의 안전을 고려하여 문장의 내용은 이미 알레르기 처리를 했다.
다음은 AOSP의 창고 하나를 분리해서 apk를 독립적으로 컴파일할 수 있는 응용 프로그램으로 만드는 방법을 소개할 것이다.
3. 준비 작업
우선 다음과 같은 지식 스킬이 필요합니다.
  • Kotlin 기본 문법 습득: AOSP에서 kt가 차지하는 비례가 버전별로 커지기 때문에 기본적인kt문법을 습득해야 원본 코드를 순조롭게 읽거나 수정할 수 있다.
  • AOSP의 전체적인 구조를 잘 알고 있다. 상대적으로 상부의 개발자에게는 내부 핵층, 구동층의 디렉터리 구조에 중점을 두지 않지만 프레임워크 층과 응용 층의 디렉터리 구조, 그리고 산물을 컴파일하는 디렉터리 구조를 숙지해야 한다.
  • 기본 명령: 리포 명령, 환경 설정 명령, 편집 명령, 단일 명령 등을 포함한다.
  • Gradle:build에 익숙하다.gradle 파일의 설정입니다.

  • 만약 네가 상술한 지식점을 이미 해결했다면, 다음에 우리는 한 걸음 한 걸음 독립된 번역의 응용을 결합시키기 시작할 것이다.
    4. 코드 주체 결합
    결합을 기다리는 모듈 자체는git창고가어야 합니다.
  • 새git창고를 신청하거나 기존 창고로 새로운 지점을 만듭니다.
  • AOSP의 이 창고 전체를 간단하고 난폭하게 복사하여 디렉터리 구조를 변하지 않게 한다.

  • 5.Gradle 컴파일 환경 설정
    AOSP의 컴파일링 방식은 정편이든 단편이든 모두 모듈 루트 디렉터리에 있는 컴파일링 파일로 구 버전Android.mk은 최근에 Android.bp로 바뀌었고 Json 형식과 유사한 컴파일링 방식은 개발자의 읽기와 유지보수에 더욱 유리하다.
    독립된 컴파일링 응용으로 결합할 때gradle 컴파일링 방식으로 바뀌어야 하기 때문에 먼저 설정build.gradle 파일이 필요하고, 그 다음은 로컬properties 파일, 그리고 기타 일부 설정 파일과 스크립트 파일(자신의 업무 수요에 따라 결정)이 필요하다.
    gradle 컴파일 명령을 실행하면 결과를 실행하고 출력할 수 있습니다. 다음 단계를 계속하십시오.
    6. Framework 자원 의존
    풀기 전의 모듈은 일부 자원 id, 예를 들어 프레임워크에 의존하는 자원 id를 사용할 수 있습니다. 원래는 AOSP 환경에 있기 때문에 편집이나 편집을 할 때 직접 인용할 수 있지만 풀린 후에 자원 id를 찾지 못해 컴파일을 통과할 수 없습니다.
    이 경우 솔루션은 Resources#getIdentifier를 통해 제공됩니다. 예:
    원생에 자원 인용이 com.android.internal.R.string.resName이면 결합된 자원 id 획득 방식은 다음과 같다.
    int resId = context.getResources().getIdentifier("resName", "string", "android");
    

    AssetManager#nativeGetResourceIdentifier를 통해 최종적으로 얻을 수 있기 때문에 대량의 자원 id가 존재할 때 성능에 대한 영향을 고려해야 한다.
    7. 프로토 파일 동적 생성 클래스
    일부 모듈은 원본에 없는 자바 파일을 사용할 수 있으며 그 특징은proto 키워드가 있을 수 있습니다.이것이 바로 동적 생성의 종류다.
    proto 파일은 자바 파일을 생성하는 파일을 컴파일하는 데 사용되는 파일로 패키지,className,innerClass,field 등을 포함하여 구글protobuf이라는 라이브러리를 빌려야 컴파일할 수 있습니다.
    protobuf 정보:
  • 구글 소개protobuf
  • github-protobuf

  • AOSP의 모듈은 프로토 파일이 있으면 모듈 자체도 protobuf에 대한 의존을 설정하기 때문에 편집을 정상적으로 수행할 수 있다.즉, 편집의 컴파일 순서에서 각 모듈의 프로토 파일을 먼저 컴파일하여 필요한 자바 파일을 생성한 다음에 AOSP에 대한 편집을 시작한다. 그렇지 않으면 프로젝트에서 이 자바 파일을 인용하면 컴파일할 수 없다.
    결합된 응용에 있어 protobuf 라이브러리에서 자바 파일을 자주 컴파일하는 것이 아니라 편집된 컴파일링 산물을 직접 인용해서는 안 된다.Android.bp 파일에는 다음과 같은 프로토 파일 관련 정보가 정의됩니다.
    java_library {
        name: "Demo-proto",
        srcs: ["src/**/*.proto"],
        proto: {
            type: "nano",
        }
    }
    

    AOSP에서 proto 파일의 컴파일된 결과물은 다음과 같습니다.
    android\out\target\common\obj\JAVA_LIBRARIES
    편집에 성공한 JAVA_LIBRARIES 폴더에서 Demo-proto_intermediates라는 폴더를 찾을 수 있습니다. 이 폴더에는 우리가 필요로 하는 자바 파일이 포함되어 있습니다.
    이 중 classes.jarDemo-proto.jar 로 바꾸고, 결합된 프로젝트의 libs 에 복사하여 의존도를 설정합니다.
    이 가능하다, ~할 수 있다,...
    8.1 SDK의 API 누락
    일반적으로 코드베이스가 제때에 업데이트되지 않았습니다.
    8.2 기타 동적 생성 클래스 결함Android.bp 파일에 정의된 정보가 있는지 확인한 다음proto의 처리 방식에 따라 부족한 클래스를jar 패키지를 통해 도입합니다.

    좋은 웹페이지 즐겨찾기