2014-11-26 23 views
13

Android L'ye yükselttim ve "Google oynatma" bölümünde uygulamamın yayınlanmış bir sürümüne ve geliştirme için kullandığımız bir hata ayıklama sürümüne sahip oldum.Android L sürümleri ile sürüm ve hata ayıklama hataları arasında çakışma

Farklı anahtarlarla imzalanırlar.

Sorunum şöyle tanımlanır ayıklama sürümünü yüklemeden çalıştığımda ardından "Google oynamak" sürümünü yüklemek ve şudur:

debug { 
     debuggable true 
     packageNameSuffix ".debug" 
     buildConfigField BOOLEAN, IS_DEV, TRUE 
    } 

Ve bu aldığım hatadır:

Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.app.name.permission.C2D_MESSAGE pkg=com.app.name] 

Bu sorunlu izni: Ben farkındayım

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

<uses-permission android:name="com.app.name.permission.C2D_MESSAGE"/> 

(http://commonsware.com/blog/2014/08/04/custom-permission-vulnerability-l-developer-preview.html) ve bunun bir güvenlik sorunu nedeniyle oluşturulduğu gerçeği, ancak yine de her birinin kendi hata ayıklama imza anahtarına sahip bir ekiple çalışabilmem gerekiyor.

Adb uninstall (https://stackoverflow.com/a/27090838/2746924) kullanarak kaldırmayı denedim ve tüm uygulamaları önbelleğe almayı denedim.

+0

'packageNameSuffix '' in bir süredir kullanımdan kaldırıldığını unutmayın. Bunun yerine 'applicationIdSuffix' kullanın. Sorunuzla ilgili olarak, GCM'nin 'applicationId' hakkında dikkatli olması gerektiğini düşünürdüm ve özel izinlerinizin 'com.app.name' parçaları hata ayıklama ve sürüm oluşturma işlemleri arasında farklı olmalıdır. Mevcut izni temizleyememeniz açısından, henüz test yapmıyorum (daha sonra bugün için planlıyorum), ancak bir fabrika ayarlarına sıfırlama yapılması gerektiğinden şüpheleniyorum. – CommonsWare

+1

Doğru, paket isimlerinin sürüm ve hata ayıklaması arasında değiştirilmesi muhtemelen işe yarar, ancak bu benim tatlarımı öldürür. – JY2k

+0

"sürüm adları ile sürüm ayıklar arasında paket adlarını değiştirmek muhtemelen işe yarayacaktır" - zaten bunu yapıyorsunuz, sorunuzdaki 'build.gradle 'snippet'iniz tarafından kanıtlanmıştır. – CommonsWare

cevap

24

başarıyla, tutucuları kullanmak bildirim değiştirerek aynı anda aynı Android 5.0 Nexus 9 yüklü bir GCM istemci uygulamasının hem debug ve release sürümleri sahip olabilir:

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

Not önce bilmeniz gerekenler Ayrıca <category> için senin <receiver> yılında ${applicationId} kullanın:

<receiver 
     android:name="GCMBroadcastReceiverCompat" 
     android:permission="com.google.android.c2dm.permission.SEND"> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE"/> 

      <category android:name="${applicationId}" /> 
     </intent-filter> 
    </receiver> 

(açıkçası, ben özel <permission> bile gerekli olduğunu ikna değilim nymore, onu çıkarmadan çalıştı ve bunu olduğu gibi o zaman da build.gradle tanımlarsanız hala örneğin debug), sen ile sona erecek inşa türlerinden biri (bir applicationIdSuffix ile, GCM iletileri)

alabilmesini verilen yapı tipine göre ayrı özel izinler ve bunları yan yana yerleştirebileceksiniz.

+0

Bu aynı zamanda mağaza hatası oynamak için bir çözümdür -505 –

İlgili konular