我們有一個由第三方庫(altbeacon),本地構建的Android庫和應用程序組件組成的應用程序。所有這三個組件都有一個AndroidManifest.xml,它們在構建期間被合併。該應用程序使用gradle構建。Android Manifest重複權限
該應用長期以來一直在Google Play商店上發佈。在最後一次迭代中,我們將API級別從22級升級到了25級。所有內容都沒有錯誤地構建,APK安裝並在真實設備上測試,沒有錯誤,但是當我們在Google Play上更新應用時,APK上傳失敗錯誤:
Upload failed
Duplicate declarations of permission android.permission.ACCESS_COARSE_LOCATION with different maxSdkVersions.
Anaylyzing的AndroidManaifest.xml我們發現org.altbeacon.beacon具有以下權限:
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="23" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
我們當地的Android庫模塊targetSdkVersion設置爲25的build.gradle和AndroidManifest.xml包含:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
在app模塊中,targetSdkVersion在build.gradle中設置爲25。
應用模塊中的產生的AndroidManifest.xml包含:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
,只是確認,看在APK本身並提取二進制文件清單:
~/.android-sdk/build-tools/25.0.3/aapt l -a app-release.apk | grep -B1 COARSE
E: uses-permission (line=62)
A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION")
--
E: uses-permission-sdk-23 (line=76)
A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION")
因此,有一個重複標籤,我認爲明細合併應該已經識別並從altbeacon庫中刪除了該合併。我的問題是如何從altbeacon庫中刪除權限?
我試圖在應用程序模塊的AndroidManifest.xml如下:
<uses-permission-sdk-23
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove"
tools:selector="org.altbeacon.beacon"/>
這導致:
AndroidManifest.xml:12:5-15:48 Warning:
uses-permission-sdk-23 was tagged at AndroidManifest.xml:12 to remove other declarations but no other declaration present
和
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove"
tools:selector="org.altbeacon.beacon"/>
這導致:
AndroidManifest.xml:12:5-15:48 Warning:
uses-permission was tagged at AndroidManifest.xml:12 to remove other declarations but no other declaration present
下面的工作,但它刪除了錯誤的標記,它刪除了我們構建的本地Android庫中的一個作爲我們的應用程序的一部分。
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove"/>
的org.altbeacon.beacon權限留給:
~/.android-sdk/build-tools/25.0.3/aapt l -a app-release.apk | grep -B1 COARSE
E: uses-permission-sdk-23 (line=72)
A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION")
因爲如果org.altbeacon.beacon庫chamge的權限,或者它在未來移除時不能令人滿意,該ACCESS_COARSE_PERMISSION將從我們的應用程序中丟失。
有關如何正確解決此問題的任何建議?
我有完全相同的問題。 – green0range
我已經向Google提交了一個缺陷 - https://issuetracker.google.com/issues/62267639 – BitByteDog
夠搞笑的是,我們現在正面對與這個完全相同的庫完全相同的問題! –