[问题] Android 打包 aar 问题

楼主: blueblueChen (蓝蓝欠)   2017-12-17 11:06:52
我原本有个 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 来获取
资源档吗?????
作者: ssccg (23)   2017-12-17 15:07:00
res的代码不同module编出来就会不一样,android studio中包别的module可以用其实是build时会把包进来的R的内容修改掉如果是拿到非官方这套build系统的环境有问题是正常的而只拿jar去用的话不管在哪个环境只能用getIdentifier
楼主: blueblueChen (蓝蓝欠)   2017-12-17 16:29:00
你所说的R是指 aar 中 R.txt吗?jar 不是只有 class 吗? 我之前有看到s大回 jar 只有 class 没有包资源档,包给其他人用,那不就不用担心 R会被修改之类的问题了?
作者: erty0402 (缺副驾驶)   2017-12-18 18:09:00
aar应该会有自己的package.R使用的时候直接用这个存取应该就可以了

Links booklink

Contact Us: admin [ a t ] ucptt.com