scan - android studio室內定位




Android清單重複權限 (2)

我們有一個由第三方庫(altbeacon),本地構建的Android庫和應用程序組件組成的應用程序。 所有這三個組件都有一個AndroidManifest.xml,它們在構建過程中被合併。 該應用程序使用gradle構建。

該應用在Google Play商店中已經很久以前就已經發布了。 在最後一次迭代中,我們將API級別從22級升級到了25級。所有內容都沒有錯誤,APK已經安裝並在真實設備上測試,沒有錯誤,但是當我們在Google Play上更新應用時,APK上傳失敗錯誤:

上傳失敗
使用不同的maxSdkVersions重複聲明權限android.permission.ACCESS_COARSE_LOCATION。

分析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在build.gradle中設置為25,AndroidManifest.xml包含:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

在app模塊中,targetSdkVersion在build.gradle中設置為25。

在app模塊中生成的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將從我們的應用程序中丟失。

任何建議如何解決這個問題?


只需將下面的行替換為您現有的使用權限即可解決問題。

這是什麼原因造成的,因為您在清單中添加了重複的權限,但在下面的行中分割了權

<uses-permission
      android:name="android.permission.ACCESS_COARSE_LOCATION"
      android:maxSdkVersion="22"/>


在您的應用清單文件中添加下面的合併規則。

<uses-permission-sdk-23
        tools:node="removeAll" />

確保您已經添加了位置權限。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />






altbeacon