Android 컴파일 버전 eng, user 및 userdebug의 차이점:
1. Android 공식 웹사이트의 설명
eng 이는 기본 버전입니다. make eng과 동일합니다.
* eng, debug, user 및/또는 development 태그가 지정된 모듈을 설치합니다.
* 태그가 지정되지 않은 비 APK 모듈을 설치합니다.
p>* 태그가 지정된 APK 외에 제품 정의 파일에 따라 APK를 설치합니다.
* ro.secure=0
* ro.debuggable= 1
* ro.kernel.android.checkjni=1
* adb는 기본적으로 활성화되어 있습니다.
* Setupwizard는 선택 사항입니다.
user make user< /p>
최종 릴리스 비트로 의도된 버전입니다.
* user 태그가 지정된 모듈을 설치합니다.
* 다음과 같은 APK가 아닌 모듈을 설치합니다. 지정된 태그가 없습니다.
* 제품 정의 파일에 따라 APK를 설치합니다. APK 모듈에서는 태그가 무시됩니다.
* ro.secure=1
* ro.debuggable= 0
* adb는 기본적으로 비활성화되어 있습니다.
* 기본적으로 모든 TARGET 프로젝트에 대해 dex 사전 최적화를 활성화하여 장치 첫 부팅 속도를 높입니다.
userdebug make userdebug
다음을 제외하고 user와 동일합니다.
* 또한 debug 태그가 붙은 모듈을 설치합니다.
* ro.debuggable=1 p>
* adb는 기본적으로 활성화되어 있습니다.
2. MTK 컴파일 버전에 대한 보충 지침
MTK 보충 지침 차이점: (
( 1) 디버그/로그 측면에서 원칙적으로 사용자 버전은 제한된 정보만 캡처할 수 있는 반면, 영어 버전은 더 많은 정보를 캡처할 수 있으며 개발 및 테스트에는 영어 버전을 사용하는 것이 좋습니다. p>
* user/eng 버전이 ro로 설정되어 있기 때문입니다. 보안상의 차이로 인해 adb의 사용자 버전에는 쉘 권한만 있는 반면 eng 버전은 있습니다.
루트 권한이 있습니다
* MTK 시스템 로그 ICS 이후 사용자 버전에서는 모든 로그가 기본적으로 닫혀 있고 영어 버전에서는 기본적으로 열려 전체 정보를 캡처합니다
* eng 버전 버전으로 보면 LOG 양 >= 사용자 버전의 로그 양 어떤 곳에서는 eng/사용자 버전을 직접 확인하여 LOG 인쇄 여부를 확인합니다
* 사용자 버전은 uart를 끕니다. eng 버전에서는 기본적으로 uart가 활성화됩니다.
* eng 버전에서 ANR의 사전 덤프를 활성화하면 ftrace가 캡처되고 더 많은 ANR 정보를 얻을 수 있습니다.
* eng 버전에서는 rtt를 사용하여 역추적을 캡처할 수 있고, 커널 디버그를 위해 kdb를 열 수 있으며, ftrace를 사용하여 CPU 실행 장면을 캡처할 수 있습니다.
* MTK aee는 ENG에서 더 많은 예외 정보를 캡처합니다. 예를 들어 네이티브 예외는 코어 덤프 정보를 캡처합니다.
(2) 성능 성능 테스트 측면에서는 원칙적으로 사용자 버전 테스트를 사용하십시오.
* 개선을 위해 첫 번째 부팅 속도에서는 사용자 버전은 DVM 사전 최적화를 사용하여 dex 파일을 직접 로드하고 실행할 수 있는 odex 파일로 분해합니다. ENG 버전은 이 최적화를 활성화하지 않습니다.
* 적은 LOG 인쇄, uart는 끄는 것이 원칙입니다. eng 버전보다 user 버전의 성능이 더 좋습니다.
(3) 사용자 /eng 버전 확인 방법
* Java 레이어를 확인하세요. android.os.Build 클래스의 TYPE 값
* 네이티브 레이어, property_get("ro.build.type", char* value, "eng") 그런 다음 값 값을 확인하세요.
* 디버그 시 adb shell getprop ro.build.type 반환 값 user인 경우 사용자 버전, eng은 eng 버전
* 로그 확인, ro.build.type 속성 확인 모바일 로그/Aplog_xxxxx/versions
(4) 사용자/eng 버전 컴파일 방법
* 기본 컴파일은 eng 버전입니다. 사용자 버전을 컴파일해야 하는 경우, 매개변수 -o=TARGET_BUILD_VARIANT=user를 추가하세요:
./mk -o=TARGET_BUILD_VARIANT=user mt6577_phone new
default.prop 및 /system/build.prop p> p>
3. 컴파일된 버전과 ADB 및 루트 간의 제어 관계
1. 루트 권한: adb.c 및 ro.kernel.qemu 속성(에뮬레이터인지 여부) , ro.secure, ro.debuggable, service.adb.root가 관련되어 있습니다.
service.adb.root: services.c -> restart_root_service()의 설정
build/core/main.mk의 다음 위치는 ro.secure 및 ro.debuggable 값을 결정합니다.
user_variant := $(filter user userdebug,$(TARGET_BUILD_VARIANT))
enable_target_debugging := true
tags_to_install :=
ifneq (,$(user_variant))
# 대상은 사용자 빌드에서 안전합니다.
ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
...< /p >
else # !user_variant
# 비사용자 빌드에 대해 checkjni를 활성화합니다.
ADDITIONAL_BUILD_PROPERTIES += ro.kernel.android.checkjni=1
# 비사용자 빌드에 대해 기기 안전하지 않음을 설정합니다.
ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0
# 비사용자 빌드에 대해 기본적으로 모의 위치를 허용합니다
ADDITIONAL_DEFAULT_PROPERTIES += ro.allow.mock.location=1
endif # !user_variant
ifeq (true,$(strip $(enable_target_debugging)))
# 대상은 디버깅 가능성이 더 높으며 기본적으로 adbd가 켜져 있습니다.
ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
# 이 빌드에 디버깅/테스트 OTA 키를 포함합니다.
INCLUDE_TEST_OTA_KEYS := true
else # !enable_target_debugging
# 대상은 디버그 가능성이 낮고 adbd는 기본적으로 꺼져 있습니다.
ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable = 0
endif # !enable_target_debugging
## eng ##
...
endif
2 adbd 서비스 활성화 여부: UsbDeviceManager.java는 persist.sys.usb.config, sys.usb.config, persist.service.adb.enable
persist.sys.usb 속성과 연결되어 있습니다. config:/build/tools/post_process_props.py ro.debuggable에 따라 persist.sys.usb.con을 설정합니다.
fig의 초기값
sys.usb.config: UsbDeviceManager.java -> setUsbConfig
sys.usb.config 속성 변경 사항이 init.clippers.usb 파일에서 모니터링되는 경우 .rc 작업
속성:sys.usb.config=adb에 대한