2010-02-09 62 views
6

我的Android應用程序可以分爲客戶端UI層和API層。我想將它們部署爲單獨的「應用程序」,以便可以重用API層。Android:如何使用「uses-library」?

在Eclipse中,我將它們編寫爲2個獨立的Android項目。在客戶端UI項目中,我聲明瞭API項目的構建路徑(項目 - >實體 - > Java構建路徑 - >項目)。

當部署通過Eclipse中的客戶端UI項目(我的實際G1手機上),它會自動部署API項目(打包成APK)爲好。

然而,啓動客戶端UI應用程序時,我打這個錯誤:

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) 

環顧四周,它似乎我應該在UI客戶端清單文件正在申請申報用途庫。

問題是,我應該把什麼放在android下:名稱爲uses-library?開發指南說「圖書館的名稱」,但圖書館的名稱是什麼? (我的意思是,在我的API「應用程序」,我還沒有宣佈任何庫名的任何地方。)

回答

10

我不相信<uses-library>與此有關。

的選項有:

  1. 實現你的「圖書館」作爲一個JAR,被列入在編譯時等項目。只要你的圖書館沒有試圖定義資源,你的狀態就很好。請參閱我的github page上的CWAC項目瞭解如何設置此示例。

  2. 實施你的「文庫」爲包含一個遠程服務,使用AIDL定義一個單獨的APK。不要試圖按照您目前在Eclipse中所做的那樣混合構建路徑,而是要遵循AIDL規則並讓每個項目都使用通用的AIDL定義。您還需要安排您的用戶安裝兩個APK。

  3. 實現你的「庫」爲包含ContentProvider一個單獨的APK。不要試圖按照您目前在Eclipse中所做的方式來融合構建路徑,而應遵循ContentProvider規則,並讓客戶端通過ContentResolver和定義的Uri訪問提供者。您還需要安排您的用戶安裝兩個APK。
+1

謝謝!從它的角度來看,選項1是最適用的。我會看看你的項目以供參考。 – 2010-02-10 00:32:35

+0

嗨CommonsWare,我看了你的CWAC緩存項目。 1.我可以看到你使用Ant build.xml來構建和組裝JAR。對於另一個使用該JAR的項目,您如何在Eclipse中進行設置,以便(a)在編碼/編譯時解析依賴關係;(b)在部署時,它們被構建到一個APK中並部署? 2.我認爲CWAC-Cache不是單獨運行的(我是否正確?)。在這種情況下,爲什麼仍然需要使用MAIN操作和LAUNCHER類別在AndroidManifest.xml中配置Activity?這是必需的嗎? – 2010-02-10 21:58:26

+0

簡單:我不使用Eclipse。 :-) CWAC-Cache有一個示例演示活動(如果您編譯APK),但其主要作用是「ant jar」目標來創建其他項目可以使用的實際緩存代碼的JAR。 'ant jar'任務跳過演示代碼(用'.demo'子包封裝)。 – CommonsWare 2010-02-10 22:45:33