作者blueblueChen (蓝蓝欠)
看板AndroidDev
标题[问题] Android 打包 aar 问题
时间Sun Dec 17 11:06:52 2017
我原本有个 project A ,原本是要 build 成 APK,後来因为需求 在 build gradle 改成
build library。resource/ 底下的 layout 保留。
然後我 build 成 aar 後,将它 import 到 project B 用Android Studio运作正常。
後来我连 project B 都要变成 libary 给 Unity 平台。我又用同样的方法手动将
build gradle 改成从 build application 变成 build library,最後也build出一个
aar,然後我将 project A 和 project B 的 aar 各取出 class.jar 然後重新包成一
个新的 class.jar,丢到Unity平台。最後运行时,出现资源档的问题
E AndroidRuntime: Caused by: java.lang.NoClassDefFoundError: Failed
resolution of: Lcwm/a3gtest/R$layout;
我昨天找了解法,发现在批踢踢也有人在问这问题。也解决了。问题发生原因是
Project B 中有个 Activity ,它的 layout 找不到,但我明明也把所有资源档
丢到 Unity 平台上去了,我的解法是,在 project B 中不要用 R.layout.xxxx_ooo
找资源档,而是要用
getResources().getIdentifier("xxxx_ooo", "layout", getPackageName());
才解决这问题。
但我还是不知道为何会发生这问题,我隐约感觉到是 project A build 成 aar後
连同资源档一起了,而导致 project B 发生问题。我做了个测试,将 project A
build 成 aar後,再取出 class.jar,让 project B 直接 add to library,不要
import 整个 aar module。结果在 Unity 上跑也是一样。 是不是在 project A
build 成 aar 後,里面的 .jar 会和原本的资源档做某种绑定?
还是我该 new 一个 Android Library 的专案,里面它的资源档就只有 values
这样 build 成 aar 时给 Project B ?
刚刚做了些测试:
1 开新的专案,new Module -> Android Library ,一样会出现这问题。
2 一样开新的专案,new Module -> Java Library,这样我的 class会无法用
因为我的 class 需要 import android.app.Activity
难道自己做的 aar 给别人,别人就一定需要用 getResource.getIdentifier 来获取
资源档吗?????
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 58.115.108.110
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1513480015.A.BC1.html
※ 编辑: blueblueChen (58.115.108.110), 12/17/2017 12:00:11
1F:→ ssccg: res的代码不同module编出来就会不一样,android studio中包 12/17 15:07
2F:→ ssccg: 别的module可以用其实是build时会把包进来的R的内容修改掉 12/17 15:08
3F:→ ssccg: 如果是拿到非官方这套build系统的环境有问题是正常的 12/17 15:09
4F:→ ssccg: 而只拿jar去用的话不管在哪个环境只能用getIdentifier 12/17 15:11
5F:→ blueblueChen: 你所说的R是指 aar 中 R.txt吗? 12/17 16:29
6F:→ blueblueChen: jar 不是只有 class 吗? 我之前有看到s大回 jar 只 12/17 16:30
7F:→ blueblueChen: 有 class 没有包资源档,包给其他人用,那不就不用 12/17 16:30
8F:→ blueblueChen: 担心 R会被修改之类的问题了? 12/17 16:31
9F:→ erty0402: aar应该会有自己的package.R 12/18 18:09
10F:→ erty0402: 使用的时候直接用这个存取应该就可以了 12/18 18:09