Android의 프로그램 라이브러리에서 minSdkVersion과 targetSdkVersion을 지정하지 않은 경우 프로그램에서 임의로 권한을 추가합니다

3308 단어 Android

개요


여러 가지 이유로 회사 내에서 라이브러리를 만들고 마븐 서버에서 공개하는데 응용 프로그램으로 그걸 참조하는 게 자주 있죠?
우선 결론은 이때 라이브러리 측에서 targetSdkVersion을 지정하지 않으면 READ_PHONE_STATE, READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE발표 전 구글플레이에서 눈치채면 다시 올려 확인하는 등 다음 날까지 발표돼 번거로워지기 쉽다.(드래그 요청을 통해 권한 변경을 감지할 수 있다면 더욱 좋다)

어떻게


일반적으로 mafniest에 추가되는 Permission은 AndroidManifest입니다.xml에서 오른쪽 단추 Merged Manfiest 를 누르면 라이브러리 Go to Declaration 를 찾을 수 있습니다.

하지만 이번에는 메인 맨피스트다.그냥 xml에 넘어가서 이유를 모르겠어요.
문서 구축 과정에서 생성된 anifest-merger-[バリアント名]-report.txt 이 프로젝트를 보여주면 돼요. 그래서 봤어요.
find . -name "manifest-merger*txt"
./app/build/outputs/logs/manifest-merger-[변형명]-report.txt
거기서 다음과 같은 내용을 토했다.reason: library has a targetSdkVersion < 4
IMPLIED from .../src/main/AndroidManifest.xml:2:1-550:12 reason: library has a targetSdkVersion < 4
uses-permission#android.permission.READ_PHONE_STATE
IMPLIED from .../src/main/AndroidManifest.xml:2:1-550:12 reason: library has a targetSdkVersion < 4
uses-permission#android.permission.READ_EXTERNAL_STORAGE
IMPLIED from .../src/main/AndroidManifest.xml:2:1-550:12 reason: library requested WRITE_EXTERNAL_STORAGE
에서 기술한 장면은 다음과 같은 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 부피를 분석하도록 한다.

이유가 뭐죠?


여기서부터 좀 흥미로운 이야기인데, 왜 targetSdkVersion<4면 권한이 추가됩니까?
여기 문서가 있어요.
https://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE

코드를 따라 가면 다음과 같은 내용에 도달할 수 있다.
https://android.googlesource.com/platform/tools/base/+/5521274ec220aea3f2b38d77dd34aeb463666da2
When importing libraries targeting past versions of the SDK with some
implied permissions (and possible other element types) into an
application targeting a newer SDK, we must explicitely declare those
implied permissions for the application to run correctly.
애플리케이션을 올바르게 실행하기 위해 새 OS에 명시적으로 지정해야 하는 모든 권한이 추가될 것 같습니다.
이 권한을 추가한merger 코드가 여기 있는 것 같습니다.
https://android.googlesource.com/platform/tools/base/+/2343d80f0fed536331249d0190294de0a9660358/build-system/manifest-merger/src/main/java/com/android/manifmerger/XmlDocument.java

좋은 웹페이지 즐겨찾기