作者euph (咬咬嚼嚼猴子口味)
看板AndroidDev
標題[問題] 請問在打包jar檔library的res資源問題
時間Mon May 9 14:14:37 2016
小弟做了一個簡單的JAR的library
在Eclipes裡利用project引用的方式可以順利啟動activity
但是在給Android Studio引用的時候確會出現找不到R.layout裡的資源
出現類似這樣的錯誤
java.lang.NoClassDefFoundError: com.xxxxxxxx.xxxxx.R$layout
這個xxxxxxxx的部份是我的library的包名,而不是我的應用包名
我已經有把我res裡的資源也包進去了,
是我在打包的時候設定錯誤了嗎?
或是有什麼方法能讓我的應用能去呼叫這個library的activity嗎???
--
樂於當宅男
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.219.138.142
※ 文章網址: https://webptt.com/m.aspx?n=bbs/AndroidDev/M.1462774480.A.379.html
1F:→ ssccg: jar沒有包資源檔,要用aar 05/09 14:15
2F:→ ssccg: 不然就像Eclipse的用法一樣加個module啊 05/09 14:16
是這樣的 我有用過其他第三方的jar檔,是直接可以呼叫的jar資料庫,
我們上頭是希望我能做出一個類似功能和使用方法的東西,
只是不知道為什麼我再呼叫這樣的 R.layout 就會叫不出來....
setContentView(R.layout.login_auto);
是不是有需要改寫些什麼??
3F:→ ssccg: jar的資料庫是? jar只能放class和java resource 05/09 14:39
4F:→ ssccg: 不能放android resource 05/09 14:39
5F:→ freedom74569: Android resource可以打包成.aar就可用View/Activiy 05/09 15:37
6F:→ mshockwave: android res 要用 .aar 05/09 16:14
請問是一定要使用.aar嗎?
我目前是使用第三方的支付SDK(中國的支付寶alipaySdk.jar和微信支付libammsdk.jar)
裡面使用的也只是jar檔就可以調用activity
請問這是怎麼實作的呢??
※ 編輯: euph (122.219.138.142), 05/09/2016 17:23:20
7F:→ ssccg: 不要包android res,View都用程式碼產生,string都寫死就 05/09 19:46
8F:→ ssccg: 可以,也可以只包Webview用server端去做UI 05/09 19:52
9F:→ ssccg: 調用activity跟用res是兩回事,當然只用jar的話也不會有 05/09 20:06
10F:→ ssccg: manifest所以還要叫用的人自己在manifest加宣告 05/09 20:06
原來如此!!! 我用那些jar的時候是需要另外在manifest裡加上activity的宣告
所以我的view直接寫死在程式碼裡也是一個方法,
那我還有用過一家的第三方jar是需要把res底下的layout, string等等
複製到自己專案裡,再讓jar去引用的,這個作法又是怎麼實作的呢?
像是在jar裡面的setContentView(R.layout.login_auto);
是有需要改寫成什麼樣子呢? 或是要加入classpath之類的嗎?
※ 編輯: euph (122.219.138.142), 05/10/2016 09:23:02
自己回答這個蠢問題
將所有的res都搬去外面大的專案目錄之後
使用 getResources().getIdentifier 來取得ID就可以引用了
也就是原本的在library裡面的 setContentView(R.layout.login_auto);
改寫成這樣:
setContentView(getResources().getIdentifier("login_auto", "layout",
getPackageName()));
OK~ 結案!!!
※ 編輯: euph (122.219.138.142), 05/17/2016 10:39:05