2013-07-15 14 views
8

Uygulama bağlamında tek bir uygulamayı birden fazla uygulamada paylaşıp paylaşamayacağımı merak ediyorum. Her uygulama kendi APK'sında olurdu ancak bu, kötü bir mimari gibi görünebilir, ancak önce beni duyuyor olabilirsiniz. Ben bluetooth üzerinden harici bir cihazı kontrol eden mevcut bir kütüphane var çünkü bunu yapmak istiyorumBirden çok Android uygulaması tek bir işlemi ve uygulama içeriğini paylaşabilir mi?

nedenidir. Kütüphane java'dır ancak kapakların altında java tarafından sarılmış yerli yer (c/C++) bulunmaktadır. Tüm bunları bir hizmete koymaya çalıştım ama IPC (yardımcı kullanıyordum) çok hantal bir hale geldi. Nesneyi ilkellere indirgemeye çalışmak imkansızdır (özel alanlar, jni işaretçiler vb.) Ve her şeyi AIDL ile sarmaya çalışmak çok dağınıktır.

her uygulama aynı zamanda aynı süreçte çalıştırın ve olsaydı

aynı uygulama bağlamı dolayısıyla beni orada işler çok daha kolay kılacak bir tekil nesne tutmak için izin var. Googl-fu'm bu konuda beni üzüyor. Belki de mümkün değil?

cevap

8

Evet, yapabilirler. Her iki uygulamada da aynı değerleri android:sharedUserId ve android:process'a atamanız ve aynı sertifikayla imzalamanız yeterlidir.

İlgili Bağlantılar:

+0

Tekil bir alana izin vermek için özel uygulama bağlamını nasıl belirleyebilirim? Ben android varsayalım: isim onunla bir ilgisi var ama aslında aynı sınıf olduklarını garanti eder? – startoftext

+0

@startoftext bunu anladın mı? Ben de aynı şeyi yapmak istiyorum. – Alan

+0

SharedUserId değerini ayarlamak ve her iki uygulamayı da aynı sertifikayla imzalamak için yeterli olmalıdır. android: isimlendirme, adlandırma veya doğru sürece yönlendirmek gibi daha fazla şey için kullanılır. – zgulser

5

Bu mümkün olmalıdır, ancak yine de iki farklı çalışan gerçeği ile sorun çıkıyor edeceğiz APK'ların her birinin kendi ClassLoader'ı var. Farklı ClassLoader tarafından yüklenen aynı Sınıf birbirinden tamamen farklı olduğu için, APK A'dan bir Sınıf oluşturamazsınız ve APK B'nin aynı Sınıf'a erişmesini bekleyebilirsiniz. Ancak, bir boşluk dolayısıyla çözelti Android sistemi sınıfları (örneğin, System.set/getProperty) üzerinden veri depolamak için olan aynı işlem Android sistemi sınıfların her zaman aynı ClassLoader tarafından yüklenen olmasıdır. Bu teknik hakkında mükemmel bir makale okuyabilirsiniz here.

daha Java ilkel daha karmaşık ve ciddi Saklayabileceğiniz veri yapısını sınırlar olur yukarıdaki yaklaşım dikkate veri depolamak istediğimiz için hala AIDL en iyi bahis olduğunu sona erebilir. Ancak en azından verilerinizin her iki APK’yı aynı işleme koyduğunuzda işlem sınırlarını aşması gerekmez. Bu nedenle, makul derecede verimli olmalıdır.

İlgili konular