Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature module依赖library module,引用library module资源时报错找不到 #58

Open
PengZeHai opened this issue Jul 8, 2021 · 6 comments

Comments

@PengZeHai
Copy link

你好,feature module依赖library module,引用library module资源时报错找不到,得写对应R的全路径。请问有没有更好办法

@TongWeiLe
Copy link

feature模块编译时R文件只从当前模块里面找,这个改当项目缺失比较恶心了

@Xiaojuanmao
Copy link

除了这个问题之外,你可能还会遇到 feature module单独依赖的 library module在引用宿主资源时候,能编译过但会触发运行时崩溃。这两种问题都能通过改R文件路径来解决。
除了改为全路径外,还可以从生成完的R文件下手,有两种策略:

  1. 第一种是将 feature module 里生成的所有 R.java 类都继承 base module里面的 packageName/R.java 类
  2. 第二种是手动将 base module里的 packageName/R.java 文件和 feature module 目录下所有生成的R文件全部合并

@PengZeHai
Copy link
Author

除了这个问题之外,你可能还会遇到 feature module单独依赖的 library module在引用宿主资源时候,能编译过但会触发运行时崩溃。这两种问题都能通过改R文件路径来解决。
除了改为全路径外,还可以从生成完的R文件下手,有两种策略:

  1. 第一种是将 feature module 里生成的所有 R.java 类都继承 base module里面的 packageName/R.java 类
  2. 第二种是手动将 base module里的 packageName/R.java 文件和 feature module 目录下所有生成的R文件全部合并

==================================================
这个方案在gradle 3.4的时候可行,但在gradle 3.6后,没有R.java这个中间产物了,会直接生成R.jar,这个时候有什么好的策略吗

@PengZeHai
Copy link
Author

对于没有R.java直接生成R.jar的编译,这边尝试着修改字节码,移除base module的final,让feature module R.class继承base R.class。
测试可行

@hf529270451
Copy link

hf529270451 commented Sep 15, 2021

对于没有R.java直接生成R.jar的编译,这边尝试着修改字节码,移除base module的final,让feature module R.class继承base R.class。
测试可行

请问具体怎么实现呢,我在feature module里面 用asm让 feature modue的R继承了base module的R 但是编译期间还是提示找不到符号

@PengZeHai
Copy link
Author

对于没有R.java直接生成R.jar的编译,这边尝试着修改字节码,移除base module的final,让feature module R.class继承base R.class。
测试可行

请问具体怎么实现呢,我在feature module里面 用asm让 feature modue的R继承了base module的R 但是编译期间还是提示找不到符号

用ASM也可以,我是用Javassist,添加个修改R.jar的task,对于base模块,先解压原本的R.jar,然后移除class的final,不然没法继承,再重新打包成R.jar,替换。对于feature模块,就直接修改为继承base的R就好

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants