เล่นการติดตั้งไลบรารีผู้อ้างอิงเพิ่มสิทธิ์ WRITE_EXTERNAL_STORAGE และ READ_EXTERNAL_STORAGE


19

เรากำลังพยายามอัปเดตไลบรารีผู้อ้างอิงติดตั้ง Google Play และ

ภายในเป็นการเพิ่มสิทธิ์การอ่านเพื่อเขียนภายนอก

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

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

เราจำเป็นต้องใช้สิทธิ์จริง ๆ หรือไม่?

เมืองขึ้น implementation 'com.android.installreferrer:installreferrer:1.1

ที่มาhttps://developer.android.com/google/play/installreferrer/library.html


1
สิ่งนี้ควรได้รับการแก้ไขใน 1.1.2: issuetracker.google.com/issues/146115244
Ian G. Clifton

คำตอบ:


4

ฉันก็เจอปัญหานี้เช่นกัน

แต่ในกรณีของฉันเวอร์ชัน 1.1 ยังเพิ่มสิทธิ์ READ_PHONE_STATE

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

ฉันได้แยกไฟล์. aar สำหรับ installreferrer: 1.1 และตรวจสอบไฟล์ manifest และ pom แล้วไม่มีสิ่งใดในไฟล์เหล่านี้ที่บ่งบอกว่าควรเพิ่มสิทธิ์เหล่านี้
ไฟล์รายการไลบรารีจะเพิ่มการอนุญาตนี้เท่านั้น (ซึ่งจะมีในเวอร์ชันก่อนหน้าเสมอ):

<uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE"/>

ฉันไม่พบข้อมูลที่เป็นทางการเกี่ยวกับเรื่องนี้
แต่ห้องสมุด Google อื่น ๆ มีปัญหาในอดีตด้วยการเพิ่มการอนุญาตเพิ่มเติมที่ไม่จำเป็นซึ่งได้ถูกลบไปแล้วในเวอร์ชันของโปรแกรมแก้ไขด่วนหลังจากนั้นไม่นาน
ตัวอย่างเช่น:
ทำไมจึงมีการเพิ่มสิทธิ์ READ_PHONE_STATE

ดังนั้นฉันหวังว่าจะเกิดขึ้นที่นี่


1
ติดตั้งผู้อ้างอิงเพิ่มการอนุญาตนี้เนื่องจากข้อเท็จจริงที่ว่าเป้าหมาย sdk-version ต่ำกว่าที่ได้รับสิทธิ์โดยปริยาย หากคุณดูรายงานการควบรวมกิจการคุณสามารถดูได้ที่: uses-permission#android.permission.READ_PHONE_STATE IMPLIED from android/app/src/main/AndroidManifest.xml:1:1-130:12 reason: com.android.installreferrer has a targetSdkVersion < 4 ข้อมูลเกี่ยวกับการอนุญาตโดยนัยสามารถพบได้ในเอกสารนี้: developer.android.com/studio/build/…
Dinesh

6

ติดตั้งผู้อ้างอิงเพิ่มสิทธิ์นี้เนื่องจากความจริงที่ว่าtargetSdkVersionเป็นค่าที่ต่ำกว่ารุ่นที่มีการเพิ่มข้อ จำกัด หากคุณดูรายงานการควบรวมกิจการที่สร้างขึ้นในโฟลเดอร์บิลด์ของแอพคุณสามารถดูข้อมูลนี้:

uses-permission#android.permission.READ_PHONE_STATE
IMPLIED from android/app/src/main/AndroidManifest.xml:1:1-130:12 reason: com.android.installreferrer has a targetSdkVersion < 4

ข้อมูลเกี่ยวกับการอนุญาตระบบโดยนัยนี้ทำงานบน Android ได้ในเอกสารนี้: https://developer.android.com/studio/build/manifest-merge#inspect_the_merged_manifest_and_find_conflicts


4

จากคำตอบนี้ :

นี่เป็นเพราะพวกเขาได้เพิ่มการพึ่งพา

com.google.android.gms:play-services-measurement:17.2.1

ซึ่งเพิ่มสิทธิ์เหล่านั้น

คุณสามารถค้นหาได้จากไฟล์: manifest-merger-blame-debug-report.txt ซึ่งอยู่ภายใต้ "yourApp / build / intermediates / manifest_merge_blame_file / debug"

มันอาจเป็นข้อผิดพลาด ยังinstallreferrer 1.1.1ไม่แก้มัน

ทางออกที่ง่ายที่สุดคือการลดระดับinstallreferrerกลับเป็น1.0ตอนนี้

แต่ถ้าคุณต้องการรุ่นนี้คุณสามารถเพิ่ม:

<uses-permission android:name="<permission_name>" tools:node="remove" />

เพื่อปิดการใช้งาน แต่รู้ว่าถ้าคุณใช้ API ใด ๆ ที่จำเป็นต้องใช้ภายในห้องสมุดอาจทำให้เกิดข้อขัดข้องได้ดังนั้นฉันจะไม่แนะนำให้ทำเช่นนั้น


2

การอ้างอิงจากคำตอบนี้ (และการทำให้สำเร็จ):

เวอร์ชัน 1.1 และ 1.1.1 ขาด "minSdkVersion" สิ่งนี้จะเพิ่มการอนุญาตเหล่านั้นโดยอัตโนมัติ (เพราะ SDK เริ่มต้น <4 ตามที่กล่าวโดย @thiagolr) ดูปัญหาที่คล้ายกันที่นี่: บริการ Google Play 12.0.1

สารละลาย

รุ่น 1.1.2 แก้ปัญหานี้

รายละเอียด

Manifest.xml สำหรับ v1.0 (จากhttps://mvnrepository.com/artifact/com.android.installreferrer/installreferrer/1.0 )

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.installreferrer" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="22" />

    <uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE" />

    <application />

</manifest>

Manifest.xml สำหรับ v1.1 (จากhttps://mvnrepository.com/artifact/com.android.installreferrer/installreferrer/1.1 )

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.installreferrer">

    <uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE" />

    <application />

</manifest>

1

ในทางทฤษฎีสามารถลบมันออกไปพร้อม ๆ กับการรวมกันของรายการ:

<manifest
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" />

</manifest>

แต่ถ้าห้องสมุดจะยังคงทำงานตามที่คาดไว้เป็นอีกเรื่องหนึ่ง -

มันค่อนข้างเป็นข้อยกเว้นว่าห้องสมุด Google ต้องการการอนุญาตที่ไม่จำเป็น

บันทึกประจำรุ่นและเอกสารไม่ได้กล่าวถึงสิทธิ์


1

สิทธิ์เหล่านี้ถูกเพิ่มเนื่องจากcom.android.installreferrerมี targetSdkVersion <4 คุณสามารถดูได้ในไฟล์ manifest-merger-release-report.txt ที่อยู่ในโฟลเดอร์Temp \ gradleOut \ build \ outputs \ logsภายในโครงการของคุณ นี่เป็นข้อผิดพลาดและอาจจะได้รับการแก้ไขในเวอร์ชันที่ใหม่กว่า

ในการแก้ไขปัญหานี้คุณต้องค้นหาว่าปลั๊กอินใดที่จะเพิ่มcom.android.installreferrerเป็นการอ้างอิง


ในโครงการของฉันผู้ร้ายคือปลั๊กอินFacebook มันใช้com.facebook.android:facebook-core:5.15.xแพคเกจที่รับผิดชอบในการเพิ่มการcom.android.installreferrer:installreferrer:1.1พึ่งพา

ทางออกคือการย้อนกลับไปcom.facebook.android:facebook-core:5.13.0ซึ่งไม่ได้มีการcom.android.installreferrerพึ่งพา

แก้ไขไฟล์FacebookSDK/Plugins/Editor/Dependencies.xmlและเปลี่ยนแพ็คเกจเหล่านี้เป็น:

<androidPackage spec="com.facebook.android:facebook-core:[5,5.13.0)" />
<androidPackage spec="com.facebook.android:facebook-applinks:[5,5.13.0)" />
<androidPackage spec="com.facebook.android:facebook-login:[5,5.13.0)" />
<androidPackage spec="com.facebook.android:facebook-share:[5,5.13.0)" />

ถัดไปอย่าลืมแก้ไขการอ้างอิงอีกครั้ง: Assets > Play Services Resolver > Android Resolver > Force Resolve


1

1.1.2 มีการเปิดตัวมันเพิ่ม minSdkVersion อย่างถูกต้อง

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="22" />
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.