AOSP 결합 독립 응용 프로그램 요약
4458 단어 안드로이드 진급의 길Android
본고는 Android Q를 바탕으로 AOSP의 창고를 독립된 응용으로 결합할 때의 의문점을 소개한다.
2. 소개
필자는 안드로이드 버전의 업그레이드를 맡았을 때 많은 어려움을 겪었기 때문에 이런 난점을 기록하는 것은 한편으로는 앞으로 스스로 되돌아보기 위해서이고 다른 한편으로는 동종 업계의 개발자를 돕기 위해서이다.
데이터의 안전을 고려하여 문장의 내용은 이미 알레르기 처리를 했다.
다음은 AOSP의 창고 하나를 분리해서 apk를 독립적으로 컴파일할 수 있는 응용 프로그램으로 만드는 방법을 소개할 것이다.
3. 준비 작업
우선 다음과 같은 지식 스킬이 필요합니다.
만약 네가 상술한 지식점을 이미 해결했다면, 다음에 우리는 한 걸음 한 걸음 독립된 번역의 응용을 결합시키기 시작할 것이다.
4. 코드 주체 결합
결합을 기다리는 모듈 자체는git창고가어야 합니다.
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 정보:
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.jar
을 Demo-proto.jar
로 바꾸고, 결합된 프로젝트의 libs
에 복사하여 의존도를 설정합니다.이 가능하다, ~할 수 있다,...
8.1 SDK의 API 누락
일반적으로 코드베이스가 제때에 업데이트되지 않았습니다.
8.2 기타 동적 생성 클래스 결함
Android.bp
파일에 정의된 정보가 있는지 확인한 다음proto의 처리 방식에 따라 부족한 클래스를jar 패키지를 통해 도입합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 진급의 길 - 자주 사용하는 작은 기능안드로이드 프로젝트 요약 - 일반적인 문제 및 해결 방법 소프트 키보드 높이 획득 자동 플로피 키보드 소프트 키보드 숨기기 소프트 키보드 상태 감지(팝업 회수) 폭력 방지 클릭 방법 폭력 방지 클릭 방법(자신이 클릭...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.