2010-02-09 22 views
6

Android uygulamam, bir istemci UI katmanına ve bir API katmanına bölünebilir. API katmanının yeniden kullanılabilmesi için bunları ayrı "uygulamalar" olarak dağıtmak isterim.Android: "uses-library" nasıl kullanılır?

Eclipse'de, bunları 2 ayrı Android projesi olarak yazarım. İstemci UI projesinde, API projesini yapım yolunda (Project -> Properies -> Java Build Path -> Projects) beyan ederim.

(benim gerçek G1 telefonda) Eclipse aracılığıyla istemci UI projesini dağıtma da da otomatik olarak (APK içine paketlenmiş) API projesi dağıtır. İstemci UI uygulamasını başlatırken

Ancak, ben bu hatayla i UI istemci için manifest dosyasında uygulamanın altında kullanımları-kütüphane beyan etmelidir gibi

Uncaught handler: thread main exiting due to uncaught exception 
java.lang.VerifyError: myapp.android.testuiclient.Main 
    at java.lang.Class.newInstanceImpl(Native Method) 
    at java.lang.Class.newInstance(Class.java:1472) 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1097) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2316) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
    at android.app.ActivityThread.access$2100(ActivityThread.java:116) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:4203) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:521) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
    at dalvik.system.NativeStart.main(Native Method) 

etrafında bakıldığında görünüyor. kullanımları-kitaplık için isim:

Soru i android altına gerektiği, ne olduğunu? Dev kılavuzu "kütüphanenin adı" dır, fakat kütüphanenin adı nedir? (Yani, benim "API" uygulamasında, herhangi bir yerde herhangi bir kitaplık adını bildirmedim.)

cevap

10

<uses-library>'un burada ilgili olduğuna inanmıyorum.

Seçenekleriniz şunlardır:

  1. derleme zamanında başka projelerde yer alması, bir JAR olarak "kütüphane" uygulamak. Kitaplığınız kaynakları tanımlamaya çalışmadığı sürece, iyi durumdasınız. Bunu nasıl ayarlayacağınızla ilgili örnekler için github page numaralı CWAC projelerine bakın.

  2. AIDL kullanılarak tanımlanan bir uzak hizmet içeren ayrı bir APK olarak "kütüphane" uygulamak. Eclipse'de yaptığınız gibi yapı yollarını karıştırmaya çalışmayın, aksine AIDL kurallarına uyun ve her bir projenin ortak bir AIDL tanımı kullanmasını sağlayın. Ayrıca, kullanıcılarınızın hem APK'ları yüklemesini ayarlamanız gerekir.

  3. bir ContentProvider içeren ayrı bir APK olarak "kütüphane" uygulamak. Şu anda Eclipse'de yaptığınız gibi yapı yollarını karıştırmaya çalışmayın, daha ziyade ContentProvider kurallarını izleyin ve istemcinin bir ContentResolver ve tanımlanmış Uri aracılığıyla sağlayıcıya erişmesini sağlayın. Ayrıca, kullanıcılarınızın hem APK'ları yüklemesini ayarlamanız gerekir.
+1

Teşekkürler! Bu görünümden en çok seçenek 1'dir. Referans için projelerinize bir göz atacağım. –

+0

Merhaba CommonsWare, CWAC-Cache projenize baktım. 1. JAR'ı oluşturmak ve birleştirmek için Ant build.xml kullandığınızı görebiliyorum. Bu JAR'ı kullanacak başka bir proje için, Eclipse'de nasıl kurarsınız? (A) kodlama/derleme zamanında, bağımlılık çözümlenir ve (b) dağıtım zamanında tek bir APK içine yerleştirilir ve dağıtılır. ? 2. CWAC-Cache'in tek başına çalıştırılmak üzere tasarlanmadığını varsayalım (doğru muyum?). Bu durumda, neden AndroidManifest.xml içinde bir MAIN eylemi ve bir LAUNCHER kategorisiyle bir Aktivite yapılandırmanız gerekiyor? Bu gerekli mi? –

+0

Basit: Eclipse kullanmıyorum. :-) CWAC-Cache'in örnek bir demo etkinliği vardır (APK'yı derlerseniz), ancak birincil rolü, diğer projelerin kullanabileceği gerçek önbellek kodunun JAR'ını oluşturmak için 'karınca kavanozu' hedefidir. 'Ant kavanoz' görevi demo kodunu atlar ('.demo' alt paketinde izole edilmiştir). – CommonsWare

İlgili konular