我原本有个 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 来获取
资源档吗?????