2017-02-02 6 views
4

... 그때 내 APK가 구축 mm를 사용 LOCAL_DEX_PREOPT := false을 설정 할 수 있었다 롤리팝에서Android Marshmallow 플랫폼에서 시스템 앱을 생산적으로 개발하는 방법은 무엇인가요? 나는 플랫폼의 <code>eng</code> 빌드 안드로이드 특권 시스템 애플 리케이션을 개발하고 있어요

는 시스템에 adb remountadb push APK는 할 분할. 시스템이 변경 사항을 감지하고 덱스 (dex)를 다시 작성하면 생산성이 높아졌습니다. 앱이 persistent 인 경우 프로세스를 추가로 삭제해야했습니다.

마쉬멜로 우를 개발하는 동안이 과정에서 여러 가지 문제가 발생합니다. APK를 누르면 실행하려고하면 제공 :

02-01 20 : 58 : 26.302 E/dex2oat (3045) : 귀리 파일을 만들 수 없습니다 : /데이터/달빅 캐시/arm64/시스템 @ priv- 응용 프로그램 @ XYZ @ XYZ.apk는 classes.dex @ :

[1614.216323] = 1400 감사 (686361.299 : 48) : 입력 : AVC : 거부 {쓰기} 권한

SELinux에 문제가 거부 pid = 2640 comm = "oid.XYZ"name = "arm64"dev = "dm-0"ino = 360453 scontext = U : R : system_app : S0 tcontext = U : object_r : dalvikcache_data_file : S0 인 TClass = DIR 허용 = 0

내가이 문제를 얻기 위해 해킹의 모든 종류의 시도 ...

물론 전체 시스템을 다시 빌드하고 플래시 할 수는 있지만 생산성이 떨어집니다.

답변

2

나는 SELinux와 app_main.cpp를 수정하는 것보다 훨씬 간단한 대안을 발견했다고 생각한다.

  1. 빌드가 LOCAL_DEX_PREOPT := false와 응용 프로그램은 그래서 덱스 파일이 적어도 한 번 APK
  2. adb remount
  3. adb rm -rf /system/priv-app/XYZ/oat
  4. adb push $OUT/system/priv-app/XYZ/XYZ.apk /system/priv-app/XYZ/
남아 : 다음 단계를 수행하여 내 시스템이 빠르게 앱을 업데이트 할 수 있습니다
+0

Nougat에는 'oat' 디렉토리가 없으므로이 단계를 건너 뛰고 Lollipop처럼 개발할 수 있습니다. – satur9nine

+0

위 해결책의 한 가지 문제점은 Nougat에서도'adb shell stop '과'adb shell start'로 OS를 다시 시작하지 않으면'AndroidManifest.xml'에 대한 변경 사항이 적용되지 않는다는 것입니다. 전체 운영 체제를 실행할 필요가없는 해결 방법을 알고 싶습니다. – satur9nine