2012-01-31 41 views
2

我已經爲一些朋友和客戶構建了一個半推送服務(檢查來自集中http服務器的通知),因此他們可以輕鬆地將推送式通知添加到他們的應用程序中,而不會有太多麻煩。使用JAR打包drawable資源?

我已經得到了足夠遠打包JAR,包括它在我的一些其他項目,但現在我打磚牆關於資源包裝 -

  • 在我PushNotify項目,我有一個資源:R.drawable.goldstar
  • 我通過引用resources.getIdentifier('goldstar', 'drawable', 'com.com.pushnotify')
  • 當我打包PushNotify作爲自己的APK繪製兩次申請,一旦通過引用R.drawable.goldstar,有一次,金五星正確顯示在這兩個地方。
  • 我在Eclipse中右鍵單擊Export Project作爲JAR文件,從包含的文件中取消選中「ApplicationManifest.xml」,然後單擊「Finish」。
  • 我可以在添加更多可繪製資源時驗證此JAR文件的大小是否增加。
  • 當我在構建路徑中打包DependantApp.apk,包括PushNotify.jar時,金星正確出現在兩個地方。
  • 如果我卸載PushNotify.apk,黃金星星將從DependantApp.apk中消失,就好像它們沒有與JAR打包在一起;返回0值爲getIdentifier('goldstar', 'drawable', 'com.com.pushnotify')

我該如何分配帶有可繪製資源的JAR,並讓它們出現在從屬應用程序中?包括我的JAR在內的應用程序永遠不需要訪問我分發的圖標,只有我自己的代碼可以。

儘管進行了大量的NaY話說,在搜索結果中我發現,我敢肯定這是某種可能,因爲)我的JAR文件的增長,當我添加新的圖像,和b)我已經包括JAR文件(Airpush這樣做,UrbanAirship也一樣)。

在此先感謝!

回答

2

如何分配帶有可繪製資源的JAR,並讓它們出現在相關的應用程序中?

目前尚未支持。創建可分發資源的Android庫項目是工具路線圖,希望在不久的將來出現。

+0

我已經使用了我正在討論的JAR文件。請閱讀我的最後一段。 – linked 2012-02-01 00:39:42

+0

@linked:你目前不在支持。作爲可重用組件的一部分分發資源的唯一支持手段是Android庫項目。那些不能直接打包成JAR。 「目前,還不支持包含jar文件的庫項目,而不是源代碼。」 (http://tools.android.com/recent/buildchangesinrevision14)雖然該文件表明R15應該增加對此的支持,但它沒有,也沒有R16。 – CommonsWare 2012-02-01 01:12:50

+0

@linked:儘管存在粗糙的解決方法,但目前沒有涉及實際存在於JAR中的資源。我並不清楚JAR中的資源是否是Tools工作組計劃的一部分,儘管我當時有這種印象。 Java已經擁有自己的「資源」構造的時間比Android更長,並且它支持JAR中的東西,但是您不會通過'R.'常量訪問它們 - 儘管名稱相同,但Android中的「資源」與「舊資源」中的Java風格。 – CommonsWare 2012-02-01 01:15:21

0

我不認爲這是可能的方式,你試圖做到這一點。 Android「建立」其內部資源。 jar文件中的資源(據我所知)被忽略。

你可以將它構建爲包含這些xml佈局的「android-library」。如果您不希望整個代碼「易於閱讀」,則只能將此資源和正在使用它們的類放入「android-library」中,而庫中的其餘部分保留在.jar文件中。

0

這不正是你問什麼,但在這裏是一個有趣的選擇呢:

代替getIdentifier('goldstar', 'drawable', 'com.com.pushnotify')使用getIdentifier('goldstar', 'drawable', getApplicationContext().getPackageName())

和分發圖像/資源的.zip進行解壓縮,安裝和編譯目標應用程序(將使用您的共享.jar)

並且不要在.jar中包含圖像。

這沒有測試,但應該工作。