作者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/cn.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