Dışa aktarılan hizmet için izin gerekmez: bu ne anlama geliyor?


143

AIDL aracılığıyla diğer uygulamalar tarafından bağlanan bir hizmet oluşturdum ve manifest'e aşağıdaki gibi ekliyorum:

<service android:name=".MyService">
    <intent-filter>
        <action android:name="org.example.android.myservicedemo.IService" />
    </intent-filter>
</service>

Burada IService, AIDL arabirimidir.

Bu şekilde, Eclipse bana Aktarılan hizmet için izin gerektirmeyen uyarısını gösterir . Kaldırırsam intent-filteruyarı kaybolur, ancak açıkçası uygulamalar hizmete bağlanamaz.

Bu uyarı ne anlama geliyor?


31
Bu, kullanıcının telefonunda sahip olduğu diğer (keyfi) uygulamaların ServiceAIDL arabiriminiz aracılığıyla maruz kaldığı herhangi bir yöntemi kendinize bağlayıp arayabileceği anlamına gelir.
Jens

25
AndroidManifest.xml dosyasında yeni bir <permission> oluşturun ve bunun adını beyanınızın android:permissionniteliği olarak kullanın <service>. Ya da sadece uyarıyı dikkate almayın - hizmet ne yapmayı amaçlıyor? Eğer "iç" hizmetini tutulması ile para cezası ise sadece sette çok daha kolay android:exported="false"senin üzerinde<service>
Jens

3
Sonra ya uyarıyı yoksayın ya da bir <izin> ekleyin, hepsi aynı sertifikayla imzalanmış kendi uygulamalarınızsa "imza" kullanın ya da sadece "normal" ile devam edin.
Jens

3
Uygulamalarınızı imzalamak için zaten bir (sürüm) sertifikası kullanıyorsunuz - imza koruması, izin isteyen uygulamanın izni tanımlayan uygulama ile aynı imzalı olduğunu kontrol ediyor.
Jens

2
@Jens Teşekkürler ... bana yardımcı oldu .... btw yorumlarınızı cevap olarak ekleyebilirsiniz. Enzom83 kabul etsin.
Vijay C

Yanıtlar:


128

SDK'yı sürüm 20'ye güncellediğimde de aynı sorunu yaşadım . Ben android ekleyerek kaldırıldı :android:exported="false" böyle ihraç özelliği :

<service android:name=".MyService"
    android:exported="false">
    <intent-filter>
        <action android:name="org.example.android.myservicedemo.IService" />
    </intent-filter>
</service>

Bu dokümanı görün


56

Etkinlik kullanımını kendi uygulamanızla kısıtlamak istiyorsanız exported=false, etkinliğinizin bildirim bildirimine eklemeniz gerekir .

Diğer uygulamaların kullanmasına izin vermek istiyorsanız (açıkça sınıf adı aracılığıyla veya daha iyisi, bir veri türü veya eylemi olan bir niyet kullanarak), iki seçeneğiniz vardır:

  • izin kullanarak bu uygulamaları kısıtlama
  • tüm uygulamaların onu kullanmasına izin verirseniz, tools:ignore="ExportedActivity"etkinliğinizin bildirim ifadesine ekleyebilirsiniz .

-

Aynı akıl yürütme, ile tools:ignore="ExportedService"ve olan içerik sağlayıcılar için de geçerlidir tools:ignore="ExportedContentProvider".


8
Bu benim için çalıştı, teşekkürler !! Bununla birlikte, bunun manifest dosyasının üstüne bir xmlns bildirimi eklemesini gerektirdiğine dikkat edin :xmlns:tools="http://schemas.android.com/tools"
Luis A. Florit

Teşekkürler, Eclipse tarafından otomatik olarak eklendi. Bu, diğer IDE kullanıcıları için güzel bir tamamlayıcıdır.
Snicolas

Eclipse 4.2.1 kullanıyorum ve bir hata veriyor (en azından varsayılan yapılandırma ile?). Sadece şunu söylüyor: The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not boundve bunu düzeltmek için hiçbir seçenek verilmiyor.
Luis A.Florit

Araçlarınızı kaldırırsanız ekleyecektir: foo = bar ifadesi, ardından bir hata / uyarı olduğunda, sağ tıklayın ve tools ifadesini eklemek için hızlı bir düzeltme kullanın.
Snicolas

1
Özel durum, dışa aktarılması gereken SyncService'dir, ancak yalnızca sistemin kullanmasını istiyorsunuz. SyncService veya AuthenticatorService için android ekleyin: allow = "signature"
Entreco

4

As Jens , "Bu kullanıcı onlar senin AIDL arabirimi üzerinden maruz lütfen ne olursa olsun yöntem Servis ve çağrı bağlayabilir onun telefonda sahip olduğu diğer (keyfi) uygulamaları anlamına gelmektedir." Dedi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.