我正在尝试将Android应用程序转换为lib模块,而不复制源代码。我做了(修改了build.gradle文件),它同步并构建,但当我将对生成的AAR文件的依赖项添加到另一个项目(我想使用这个库的地方)中时,构建失败,资源链接也失败。
我不明白为什么:
-
原始应用程序构建并运行
-
lib模块(从应用程序转换而来)构建
-
使用该库中的AAR的项目不会构建,并在该AAR中发现错误。
例如,一个可能的错误是:
Android resource linking failed
error: resource style/TextAppearance.Design.Tab (aka bv.dev.aarlibtester:style/TextAppearance.Design.Tab) not found.
error: failed linking references.
所以它说没有找到资源,并指向我在该库中使用的依赖项(在本例中是design
)
我创建了一个测试项目,在一个简单的例子中演示了这一点。
Github
aar-res-app
是一个简单的应用程序项目,使用design
依赖aar-res-lib
是根据该项目创建的库(转换后)aar-res-lib-tester
是一个使用该库的简单应用程序项目。
当前我将库包重命名为与应用程序包不匹配,并使用jar
而不是aar
。
我使用Gradle -> root -> Tasks -> Other -> createFullJarRelease
创建它。
结果在Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar
中
aar
和jar
不包含它们所依赖的库。若以这种方式添加库,则需要将其所有依赖项添加到使用它的项目中
在我的示例中,它是implementation 'com.android.support:design:28.0.0'
。
若项目包含很多这样的依赖项,那个么您应该添加所有这些依赖项。但你仍然可能遇到"明显合并失败"等问题。
或者,您可以尝试将您的lib部署到maven或jitpack,但您需要正确设置,以确保pom文件将与所有需要的依赖项一起生成,从而能够轻松使用此库。