编译插件的时候报找不到符号
编译插件的时候PluginManifest 报找不到符号 发现如果直接用shadow 中的插件demo依赖我的业务aar 可以用下面两种方式找到业务aar中自定义style 方式一:int b = com.aar对应包名.R.style.NoActionBar; 方式二:int c =com.tencent.shadow.sample.plugin.app.lib.R.style.NoActionBar; 但是在我自己的插件项目中 没办法通过第二种方式找到对应的style 请问大佬这可能是什么原因
我看不懂你说的两种方式和PluginManifest报找不到符号是什么关系,以及两种方式的区别是什么。
PluginManifest应该是从xml内容生成的,所以不需要你自己用两种方式去写,所以我不明白。但PluginManifest中确实有applicationTheme会引用一个R类中的值。这个值的包名前缀应该是AndroidManifest.xml中的manifest package,编译插件是通过AGP获取到它的。也许这里有bug,获取到错误的前缀了,可以提供一个可以复现问题的测试用例。
如果你说的两种方式是想获取同一个style值,那我觉得你可能是搞错了,没理解这些R值的原理。如果说插件demo依赖你的某个aar可以以你说的两个方式获取到NoActionBar。那实际上两个方式应该是获取到了两个不相关的值,只是恰好同名而已。
AGP生成的R类在这个路径下:build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/pluginDebug/R.jar,你可以解包看看。这个jar包在编译时被传到classpath里了,但没有被IDE索引,所以能编译到但IDE跳转不到。
如果你还是不能自行分析问题,你得把能复现问题的代码push上来才行了。没有代码我只能猜这么多。https://github.com/Tencent/Shadow/blob/abb72db13292982ebf5bf9f36af6ae8d2a3678a6/CONTRIBUTING.md
我遇到的问题正如您描述的,按照您的描述我拆开R.jar 发现两个包名下的R文件都有相应的资源id 且两个资源id是一样的。最后发现问题是我的项目中打开了 android.nonTransitiveRClass=true 原来是这个特性的问题,打开这个特性后 R类不会做合并,所以按照主模块manifest package去找,无法找到相应的资源,相应的资源只存在原始包名的R文件中。 感谢大佬指点
新建的项目默认android.nonTransitiveRClass=true这个会打开,需要关闭,要不PluginManifest生成会有问题