INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE


179

ฉันกำลังใช้การแจ้งเตือนของ Google ในแอปของฉันและจนถึงตอนนี้ฉันได้ทำสิ่งต่อไปนี้ในรายการ:

<!-- GCM -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- Keeps the processor from sleeping when a message is received. --> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <!-- This app has permission to register and receive data message. --> 

<!-- Creates a custom permission so only this app can receive its messages. NOTE: APP_PACKAGE.permission.C2D_MESSAGE -->   
<permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.myapp.permission.C2D_MESSAGE" />    
<!-- END GCM -->

ทำงานได้อย่างสมบูรณ์แบบจนกว่าฉันจะอัปเดต Nexus 7 เป็น Android 5.0
ตอนนี้เมื่อฉันพยายามติดตั้งแอพในอุปกรณ์นี้ด้วย Eclipse ฉันได้รับข้อผิดพลาดนี้:

INSTALL_FAILED_DUPLICATE_PERMISSION perm = com.myapp.permission.C2D_MESSAGE pkg = com.myapp

ฉันไม่เข้าใจว่าเกิดอะไรขึ้น มันทำงานได้อย่างสมบูรณ์แบบจนกระทั่ง Android 5.0
ฉันรู้ว่าฉันใช้C2D_MESSAGEในสองเส้นpermissionและuses-permissionแต่ผมได้คัดลอกโค้ดที่จากเดิมคู่มือ Google GCM แล้วดังนั้นจึงต้องปรับ


20
สิ่งที่คุณเดิมเอาข้อผิดพลาดปิดบัง (ดีฉันไม่ ... ) เป็นจริงคุณลักษณะด้านความปลอดภัยใหม่ป้องกันสองปพลิเคชันจากประกาศรับอนุญาตที่กำหนดเองเหมือนกันว่าจะมีการเซ็นชื่อด้วยลายเซ็นที่แตกต่างกันที่จะติดตั้งบนอุปกรณ์
AZ_

คำตอบ:


231

ฉันพบวิธีแก้ปัญหาที่เหมาะกับฉันแล้ว

ในอุปกรณ์ของฉัน (Nexus 7) Android 5.0 อมยิ้มฉันทำตามขั้นตอนเหล่านี้

หลังจากถอนการติดตั้งแอพคุณจะพบApp Nameภายใต้รายการแอพของDownloadedแท็บ

  • ไปที่การตั้งค่า
  • ปพลิเคชัน
  • ที่ด้านล่างของรายการคุณจะพบYourAppกับแท็ก "ไม่ติดตั้ง"
  • เปิด
  • คลิกที่OptionMenuและเลือก"ถอนการติดตั้งสำหรับผู้ใช้ทั้งหมด"

หลังจากขั้นตอนเหล่านี้ฉันติดตั้งแอพใหม่เรียบร้อยแล้วและทำงานได้ดี


6
ฉันมี Nexus 9 พร้อม android 5.0.1 และฉันไม่สามารถเห็นแอพของฉันพร้อมแท็ก "noto installed"
xXJohnRamboXx

มันใช้งานได้สำหรับฉันขอบคุณ! ปัญหาของฉันแตกต่างกันเล็กน้อย ฉันกำลังทำการทดสอบอัตโนมัติ (Xamarin.UITest) ในแอพมือถือของเราและฉันอัปโหลดเวอร์ชันอื่นสำหรับการทดสอบด้วยตนเอง เมื่อฉันพยายามโหลดแอพ (ผ่าน VS / Xamarin UITest) ไปยังอุปกรณ์ฉันเริ่มเห็นปัญหานี้ ขอบคุณอีกครั้ง.
LuFaMa

คำตอบนี้ควรเป็นคำตอบที่ถูกต้อง: stackoverflow.com/a/27767179/343679
Sharj

@Pratik Butani วิธีแก้ปัญหาทำงานให้ฉัน ฉันต้องการทราบสาเหตุของการเกิดข้อผิดพลาดหรือไม่คุณช่วยอธิบายได้ไหม
Karthikeyan ได้

1
ฉันไม่พบแอปของฉันที่ด้านล่างของรายการที่มีแท็กNOT INSTALLED คุณหมายถึงอะไร
IgorGanapolsky

139

ลบ

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
<permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature"/>

เรียกใช้แอป ... จากนั้นเพิ่ม permisson อีกครั้งและเรียกใช้แอป

พร้อม !.


31
คำตอบนี้ควรอยู่ด้านบนเนื่องจากปัญหานี้มักเกิดขึ้นเมื่อคุณพยายามติดตั้ง debug และรุ่นที่วางจำหน่ายของแอปของคุณบนอุปกรณ์เดียวกัน ด้วยวิธีนี้คุณสามารถทำได้อย่างง่ายดาย ฉันไม่รู้ว่าคุณสามารถใช้ตัวแปรในไฟล์ Manifest ได้ Upvote!
florian

4
คำตอบนี้ไม่สามารถใช้งานได้หากแอปนั้นกำลังใช้งานอยู่ ฉันไม่สามารถคาดหวังให้ผู้ใช้แอปดาวน์โหลดเวอร์ชันใหม่โดยไม่ได้รับอนุญาตจากนั้นติดตั้งเวอร์ชันที่ใหม่กว่าด้วยสิทธิ์อีกครั้ง
nilsmagnus

5
หากสิ่งนี้เกิดขึ้นกับคุณเนื่องจากคุณมีการดีบักและปล่อยเวอร์ชันของแอปที่มีชื่อแตกต่างกันการถอนการติดตั้งนั้นไม่จำเป็นสำหรับการทำงาน: คุณเพียงแค่ใช้${applicationId}แทนการ
เข้ารหัสแบบฮาร์ด

1
การใช้ $ {applicationId} แทนรหัสแอปพลิเคชันแบบคงที่แก้ปัญหาของฉันได้ !! รวมถึงเมื่อใช้ Flavours !!!!
JannGabriel

1
ความคิดเห็นของ @ yuval เป็นจุดบนและแก้ไขนี้สำหรับฉัน จากคำตอบมากมายคำตอบนี้ครอบคลุมถึงปัญหาที่ดีที่สุด: stackoverflow.com/a/36992939/56285
Jonik

49

ฉันมีปัญหาเดียวกันกับการอนุญาตให้ใช้ลายเซ็นที่กำหนดเองใน Android-21 และแก้ไขได้ด้วยการทำให้แน่ใจว่าฉันทำการถอนการติดตั้งเสร็จสมบูรณ์

นี่คือกรณีขอบที่เกิดขึ้นเมื่อ:

  1. แอปพลิเคชันกำหนดสิทธิ์ที่กำหนดเองโดยใช้ความปลอดภัยระดับลายเซ็น
  2. คุณพยายามอัปเดตแอปที่ติดตั้งด้วยเวอร์ชันที่เซ็นชื่อด้วยรหัสอื่น
  3. อุปกรณ์ทดสอบใช้ Android 21 หรือใหม่กว่าพร้อมรองรับผู้ใช้หลายคน

ตัวอย่างบรรทัดคำสั่ง

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

# This fails because the debug version defines the custom permission signed with a different key:

[root@localhost svn-android-apps]# . androidbuildscripts/my-adb-install Example release
920 KB/s (2211982 bytes in 2.347s)
        pkg: /data/local/tmp/Example-release.apk
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.example.android.example.PERMISSION_EXAMPLE_PLUGIN pkg=com.example.android.example]

# I use uninstall -k because apparently that is similar to uninstalling as a user
# by dragging the app out of the app tray:

[root@localhost svn-android-apps]# /android-sdk-linux/platform-tools/adb uninstall -k com.example.android.example
The -k option uninstalls the application while retaining the data/cache.
At the moment, there is no way to remove the remaining data.
You will have to reinstall the application with the same signature, and fully uninstall it.
If you truly wish to continue, execute 'adb shell pm uninstall -k com.example.android.example'

# Let's go ahead and do that:

[root@localhost svn-android-apps]# /android-sdk-linux/platform-tools/adb shell pm uninstall -k com.example.android.example
Success

# This fails again because the custom permission apparently is part of the data/cache
# that was not uninstalled:

[root@localhost svn-android-apps]# . androidbuildscripts/my-adb-install Example release
912 KB/s (2211982 bytes in 2.367s)
        pkg: /data/local/tmp/Example-release.apk
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.example.android.example.PERMISSION_EXAMPLE_PLUGIN pkg=com.example.android.example]

# In spite of the warning above, simply doing a full uninstall at this point turned out to 
# work (for me):

[root@localhost svn-android-apps]# /android-sdk-linux/platform-tools/adb uninstall com.example.android.example
Success

# Release version now successfully installs:

[root@localhost svn-android-apps]# . androidbuildscripts/my-adb-install Example release
898 KB/s (2211982 bytes in 2.405s)
        pkg: /data/local/tmp/Example-release.apk
Success

[root@localhost svn-android-apps]# 

ตัวอย่างของ Eclipse

ไปในทิศทางตรงกันข้าม (พยายามติดตั้ง debug build จาก Eclipse เมื่อติดตั้ง build build แล้ว) ฉันได้รับกล่องโต้ตอบต่อไปนี้:

ไดอะล็อกติดตั้ง Eclipse อีกครั้ง

หากคุณเพิ่งตอบว่าใช่ ณ จุดนี้การติดตั้งจะสำเร็จ

ตัวอย่างอุปกรณ์

ตามที่ระบุไว้ในคำตอบอื่นคุณสามารถไปที่หน้าข้อมูลแอพในการตั้งค่าอุปกรณ์คลิกเมนูล้นและเลือก "ถอนการติดตั้งสำหรับผู้ใช้ทั้งหมด" เพื่อป้องกันข้อผิดพลาดนี้


ขอบคุณ แต่คุณควรเริ่มคำตอบด้วย "คุณยังสามารถไปที่หน้าข้อมูลแอพในการตั้งค่าอุปกรณ์คลิกเมนูล้นและเลือก" ถอนการติดตั้งสำหรับผู้ใช้ทั้งหมด "เพื่อป้องกันข้อผิดพลาดนี้"
yajnesh

ได้โปรดแต่งงานกับฉัน. หลังจากการตอบสนองของคุณฉันไปที่การตั้งค่า> แอพสัมผัสในแอพเวอร์ชันเก่าและในเมนูตัวเลือกเลือก "ถอนการติดตั้งสำหรับผู้ใช้ทั้งหมด"
Fabricio PH

# 2 ของรายการเงื่อนไขของคุณไม่จำเป็นต้องเป็นจริง ในกรณีของฉันฉันไม่ได้อัปเดตแอป แต่ติดตั้ง debug-build ของแอพเดียวกันด้วยชื่อแพคเกจที่แตกต่างกันตามที่อธิบายไว้ในโปรเซเดอนี้ stackoverflow.com/a/21006552/507339 นี่เป็นปัญหาที่ฉันไม่เห็นวิธีแก้ปัญหา
Nilzor

33

ฉันได้แก้ไขสิ่งนี้แล้วโดยไม่ต้องถอนการติดตั้ง apk สำรองก่อน หากต้องการติดตั้งทั้งดีบั๊กและรุ่นวางจำหน่ายของ apk ให้ใช้ตัวคั่น $ {applicationId} ของ gradle ภายใน AndroidManifest.xml เพื่อแก้ไขค่า android 'ของชื่อสิทธิ์ในเวลารวบรวม

ตัวอย่างไฟล์ build.gradle:

buildTypes {
    debug {
        applicationIdSuffix ".debug"
        ...
    }
}

ตัวอย่างไฟล์ AndroidStudio.xml:

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
<permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature"/>

คุณสามารถตรวจสอบไฟล์ AndroidManifest.xml ที่แก้ไขภายใน apk ที่ใช้aapt l -a app-debug.apkเพื่อให้แน่ใจว่าตัวยึดตำแหน่งถูกนำไปใช้อย่างถูกต้อง หากคุณใช้รสชาติของผลิตภัณฑ์ที่หลากหลายฉันแน่ใจว่าคุณสามารถใช้รูปแบบของวิธีนี้เพื่อให้เหมาะกับความต้องการของคุณ


ดูเหมือนว่าถ้าฉันกำหนดความแตกต่างapplicationIdในสองที่แตกต่างกันproductFlavorsและการใช้เอ${applicationId}ฟเฟกต์จะเหมือนกัน
Robert

ฉันคิดว่านี่เป็นวิธีแก้ปัญหาที่แข็งแกร่งกว่าถ้าคุณต้องการมากกว่า 1 รสชาติ
Robert

ควรทำเครื่องหมายถูกต้อง พิจารณาว่าคุณไม่สามารถคาดหวังจากผู้ร่วมงานทุกคนที่จะทำแฮ็ครอบ ๆ เพื่อสร้างโครงการและติดตั้ง apk
goemic

ขอบคุณ @jackpile แอปทำงานได้อย่างสมบูรณ์แบบสำหรับฉันมีเพียงปัญหาเดียวหากมีทั้งรุ่นวางจำหน่ายและ debug builds ติดตั้งหลังจากติดตั้ง debug รุ่น build build จะเปิดขึ้นแทน
Prateek Surana

ควรทำเครื่องหมายเป็นคำตอบที่ถูกต้อง .. ขอบคุณ @Jackpile
ahmed ewess

28

ลบการอ้างอิง "Hard Coded" ใด ๆ ของชื่อแพ็คเกจของคุณออกจากไฟล์ Manifest

(นี่เป็นวิธีปฏิบัติที่ดีที่สุดแม้ว่าคุณจะไม่ได้ใช้productFlavors)

ตัวอย่างเช่นหากรายการของคุณมี:

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="com.yourpackage.name.permission.C2D_MESSAGE"/>

<permission
    android:name="com.yourpackage.name.permission.C2D_MESSAGE"
    android:protectionLevel="signature"/>
<permission
    android:name="com.yourpackage.name.permission.MAPS_RECEIVE"
    android:protectionLevel="signature"/>

เปลี่ยนเป็น:

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>

<permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature"/>
<permission
    android:name="${applicationId}.permission.MAPS_RECEIVE"
    android:protectionLevel="signature"/>

จากนั้นในโมดูลไฟล์ gradle ของคุณให้ตั้งค่าที่เกี่ยวข้องของคุณapplicationId:

signingConfigs {
    stage {
        storeFile file('keystore/stage.keystore')
        storePassword 'android'
        keyAlias 'androiddebugkey'
        keyPassword 'android'
    }
    production {
        storeFile file('keystore/playstore.keystore')
        storePassword store_password
        keyAlias key_alias
        keyPassword key_password
    }
}

productFlavors {
    staging {
        signingConfig signingConfigs.staging
        applicationId defaultConfig.applicationId + ".staging"
        versionName defaultConfig.versionName + "-staging"
    }

    production {
        signingConfig signingConfigs.production
    }
}

คุณสามารถติดตามบทช่วยสอนนี้สำหรับข้อมูลเพิ่มเติม


2
ใช้${applicationId}แก้ไขปัญหาสำหรับฉันแล้ว!
Andy

ที่อยู่นี้เป็นปัญหาที่กล่าวถึงอย่างไร
Vincent

18

ลองถอนการติดตั้งแอพด้วย adb:

adb uninstall com.yourpackage

แปลกประหลาดฉันต้องทำสิ่งนี้บน Nexus 6 ของฉันแม้ว่าฉันจะถอนการติดตั้ง APK ของฉันผ่าน System UI และมันไม่ปรากฏขึ้นภายใต้แอพที่ติดตั้ง
Jon Willis

Failure [DELETE_FAILED_INTERNAL_ERROR]มันทำให้ผม อะไรคือเหตุผล?
Reaz Murshed

17

ในขณะที่ให้ข้อผิดพลาดนี้จะระบุชื่อแพ็กเกจของแอพอย่างชัดเจนเนื่องจากการอนุญาตถูกปฏิเสธ และเพียงแค่ถอนการติดตั้งแอปพลิเคชันจะไม่สามารถแก้ปัญหาได้ เพื่อแก้ปัญหาเราจำเป็นต้องทำตามขั้นตอนต่อไปนี้:

  1. ไปที่การตั้งค่า
  2. ไปที่แอพ
  3. ไปที่รายการแอพที่ดาวน์โหลด
  4. คุณสามารถดูแอปพลิเคชันที่ถอนการติดตั้งในรายการ
  5. คลิกที่แอปพลิเคชันไปที่ตัวเลือกเพิ่มเติม
  6. คลิกที่ถอนการติดตั้งสำหรับตัวเลือกผู้ใช้ทั้งหมด

ปัญหาได้รับการแก้ไข: D


8

การติดตั้งแอปพลิเคชันใน OS 5.0 ฉันได้รับข้อความนี้:

INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.myapp.permission.C2D_MESSAGE pkg=com.myapp

ไม่มีแพ็คเกจที่ซ้ำกันและเราสามารถแก้ปัญหานี้ได้ด้วยการถอนการติดตั้งแอปพลิเคชันเก่าด้วยตนเองหรือใช้ adb:

adb uninstall com.yourpackage


5

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

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="com.google.android.permission.C2D_MESSAGE" 
            android:protectionLevel="signature" />

สิ่งนี้จะใช้ได้กับ Lollipop รุ่นเก่ากว่า ดังนั้นตอนนี้ฉันเปลี่ยนเป็น:

<uses-permission android:name="com.mycompany.myappname.c2dm.permission.RECEIVE" />
<permission android:name="com.mycompany.myappname.permission.C2D_MESSAGE" 
            android:protectionLevel="signature" />

4

CommonsWare เป็นสิทธิ แต่ในความคิดของฉันนี้เป็น (ข้อผิดพลาด) วิธีที่ไม่ดีจะพูดว่า: "apk ที่ติดตั้งบนอุปกรณ์ที่มีการเซ็นสัญญากับใบรับรองที่แตกต่างกันแล้วหนึ่งใหม่ที่คุณกำลังพยายามที่จะติดตั้ง"

นี่อาจเป็นข้อผิดพลาดใหม่เนื่องจากในอดีตเคยถามว่าจะถอนการติดตั้งแอปจากอุปกรณ์เนื่องจากใบรับรองผิดหรือไม่

วิธีแก้ปัญหาที่เจ็บปวดอย่างที่มันอาจจะเป็นการถอนการติดตั้งแอปด้วยตนเอง

นอกจากนี้สิ่งที่เราได้ทำเพื่อการพัฒนาทีมเราได้เพิ่ม debug keystore ในที่เก็บของเราและชี้ gradle เพื่อใช้ดังนี้:

android {
    ...
    signingConfigs {
        debug {
            storeFile file("../certificates/debug.keystore")
        }
    }

    ...

    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }
    }

    ...
}

และตอนนี้เมื่อส่งอุปกรณ์ระหว่างสมาชิกในทีมเราทุกคนใช้ใบรับรองการดีบักเดียวกันดังนั้นจึงไม่มีปัญหา :)


4

ใน Android 5 ตรวจสอบการตั้งค่าของคุณ -> แอพ แทนที่จะลบเพียงแค่ผู้ใช้ที่ใช้งานอยู่ (เนื่องจาก Android 5 สามารถมีผู้ใช้หลายคนและโทรศัพท์ของฉันมีผู้ใช้เป็นแขก) แตะที่ปุ่มอุปกรณ์เสริมที่มุมบนขวาของการกระทำ / แถบเครื่องมือและเลือก "ถอนการติดตั้งสำหรับผู้ใช้ทั้งหมด" ปรากฏว่าใน Android 5 เมื่อคุณเพิ่งถอนการติดตั้งจากตัวเรียกใช้คุณถอนการติดตั้งแอปสำหรับผู้ใช้ที่ใช้งานอยู่เท่านั้น

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

แอปที่ถอนการติดตั้งยังคงปรากฏในแอพ ถอนการติดตั้งสำหรับผู้ใช้ทั้งหมด


Sry, ดูความคิดเห็นของคุณ เราจะถือว่านี่เป็นโพสต์ข้อมูลเพิ่มเติมพร้อมรูปภาพ
Jordy

2

เห็นลิงค์นี้มันบอกว่ามันจะทำงานเมื่อพวกเขาได้รับการลงนามโดยคีย์เดียวกัน รหัสการปลดล็อคและรหัสการดีบักไม่เหมือนกัน

ดังนั้นทำ:

buildTypes {
        release {
            minifyEnabled true
            signingConfig signingConfigs.release//signing by the same key
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-android.txt'

        }
        debug {
            applicationIdSuffix ".debug"
            debuggable true
            signingConfig signingConfigs.release//signing by the same key
        }

    }

 signingConfigs {
        release {
            storeFile file("***\\key_.jks")
            storePassword "key_***"
            keyAlias "key_***"
            keyPassword "key_"***"
        }


}

1

แทนที่บรรทัดด้านล่าง:

<permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.myapp.permission.C2D_MESSAGE" 
android:protectionLevel="signature" /> 

1

ในกรณีของฉันฉันมีหลายแอปพลิเคชั่นติดตั้งโดยมีชื่อโดเมนอยู่ในชื่อแพ็คเกจดังนี้

com.mypackage.app1
com.mypackage.app2
com.mypackage.app3 
...

ฉันต้องถอนการติดตั้งแอปทั้งหมดที่มีชื่อแพคเกจที่คล้ายกันและติดตั้งใหม่อีกครั้งเพื่อกำจัดปัญหา

เพื่อค้นหาชื่อแพ็คเกจทั้งหมดจากอุปกรณ์ที่ฉันใช้ดังต่อไปนี้

adb shell pm list packages

จากนั้นฉันคว้าแพ็คเกจที่ตรงกับชื่อแพ็คเกจที่ฉันกำลังมองหา

dumpsys | grep -A18 "Package \[com.mypackage\]"

จากนั้นถอนการติดตั้งแอปทั้งหมดที่มีโดเมนนั้น

uninstall com.mypackage.app1
uninstall com.mypackage.app2
uninstall com.mypackage.app3
...

คุณสามารถถอนการติดตั้งแอปพลิเคชั่นโดยใช้Settingsแอพ ไปที่Settings -> Apps -> Find the app -> Uninstall

หวังว่าจะช่วยให้ใครบางคนมีปัญหาเช่นเดียวกับฉัน


0

ก่อนหน้านี้เคยกล่าวว่าพบแอพที่มีลายเซ็นแตกต่างกันในอุปกรณ์ เมื่อทำการติดตั้งจาก IDE คุณจะต้องถอนการติดตั้งหรือไม่

แต่ฉันคิดว่าจาก Android 5.0 พวกเขาเปลี่ยนเหตุผลในการถอนการติดตั้ง มันจะไม่เกิดขึ้นหากคุณติดตั้งแอพที่มีลายเซ็นเหมือนกัน


0

ฉันพบปัญหาเดียวกันกับ Nexus 5 Android Lollipop 5.0.1:

Installation error: INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.android.** pkg=com.android.**

และในกรณีของฉันฉันไม่สามารถแก้ไขปัญหานี้ได้uninstallingเพราะเป็นandroid appแต่ฉันต้องเปลี่ยนcustom permissionsชื่อแอพmanifestเพราะมันเหมือนกับแอพ Android ซึ่งฉันไม่สามารถถอนการติดตั้งหรือทำการเปลี่ยนแปลงใด ๆ

หวังว่านี่จะช่วยใครซักคน!


0

ในกรณีของฉันฉันได้รับข้อผิดพลาดดังต่อไปนี้

ข้อผิดพลาดในการติดตั้ง: INSTALL_FAILED_DUPLICATE_PERMISSION perm = com.map.permission.MAPS_RECEIVE pkg = com.abc.Firstapp

com.abc.Secondappเมื่อผมพยายามที่จะติดตั้งแอปที่มีชื่อแพ็กเกจ จุดนี้คือแอปที่มีชื่อแพ็คเกจcom.abc.Firstappติดตั้งอยู่ในแอปพลิเคชันของฉัน

ฉันแก้ไขข้อผิดพลาดนี้ได้โดยถอนการติดตั้งแอปพลิเคชันด้วยชื่อแพ็คเกจcom.abc.Firstappแล้วติดตั้งแอปพลิเคชันด้วยชื่อแพ็คเกจcom.abc.Secondapp

ฉันหวังว่านี่จะช่วยให้ใครบางคนในขณะที่การทดสอบ


0

ในไฟล์ AndroidManifest.xml ของคุณเปลี่ยนชื่อสิทธิ์ที่ประกาศเป็นพิเศษของคุณตัวอย่างเช่น:

<!-- Creates a custom permission so only this app can receive its messages. NOTE: APP_PACKAGE.permission.C2D_MESSAGE -->   
<permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.myapp.permission.C2D_MESSAGE" />    
<!-- END GCM -->

สำหรับสิ่งนี้,

<!-- Creates a custom permission so only this app can receive its messages. NOTE: APP_PACKAGE.permission.C2D_MESSAGE -->   
<permission android:name="com.myapprocks.permission.C2D_MESSAGE"  android:protectionLevel="signature" />
<uses-permission android:name="com.myapprocks.permission.C2D_MESSAGE" />    
<!-- END GCM -->

com.myapprocksส่วนนี้แก้ไขข้อขัดแย้งกับแอพอื่น ๆ ของคุณ


0

ในกรณีของฉันฉันใช้ห้องสมุดบุคคลที่สาม (เช่นผู้ขาย) และห้องสมุดมาพร้อมกับแอพตัวอย่างที่ฉันติดตั้งไว้แล้วในอุปกรณ์ของฉัน ดังนั้นตอนนี้แอปตัวอย่างจึงขัดแย้งกันทุกครั้งที่ฉันพยายามติดตั้งแอพของฉันเองที่ใช้ไลบรารี ดังนั้นฉันเพิ่งถอนการติดตั้งแอปตัวอย่างของผู้ขายและทำงานได้ในภายหลัง




0

หากคุณมีรสชาติที่แตกต่างของแอปลองถอนการติดตั้งก่อน สิ่งนี้ช่วยฉันได้เมื่อฉันมีปัญหาเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.