Android 编译gradle库时如何复制代码
我正在为手机和手表建立一个Android库。虽然有些代码是相同的,但我确实需要两个单独的模块来存储手表代码和电话代码 我构建了这个库,并将它毫无疑问地上传到Maven。我可以将这些库导入到单独的项目中而不会出现问题Android 编译gradle库时如何复制代码,android,android-studio,android-gradle-plugin,Android,Android Studio,Android Gradle Plugin,我正在为手机和手表建立一个Android库。虽然有些代码是相同的,但我确实需要两个单独的模块来存储手表代码和电话代码 我构建了这个库,并将它毫无疑问地上传到Maven。我可以将这些库导入到单独的项目中而不会出现问题 编译'com.github.fleker:my library:1.0.0' 编译'com.github.fleker:my library wear:1.0.0' 但是,我希望在我的库中有第三个模块来存储所有共享代码,从而减少复制和粘贴的代码量。在这个mylibrarycommon
编译'com.github.fleker:my library:1.0.0'
编译'com.github.fleker:my library wear:1.0.0'
但是,我希望在我的库中有第三个模块来存储所有共享代码,从而减少复制和粘贴的代码量。在这个mylibrarycommon
模块中,我存储了一些类,然后将这个库添加到每个build.gradle
编译项目(“:我的库公用”)
这似乎在我的图书馆的项目中起作用。但是,当我上载此项目并尝试将其下载到其他地方时,我在执行渐变同步时遇到错误:
未能解析:SettingsManager:SettingsManager:undefined
解析失败:设置管理员:库公用:未定义
所以我意识到我的错误。当我编译项目时,我的手机和穿戴模块是从一个已知的位置编译的。然而,它并没有导入代码,只是指向它。当我转到一个单独的项目时,该指针无效
是否有一种方法可以强制库公共
模块将其代码导入我的两个主要模块中,这样我就可以为某些代码创建一个模块,但将另外两个单独的模块作为我的实际库
也许,有一种导入项目(“:my library common”)
代替了编译项目(“:my library common”)
,它会将代码放入项目中,这样当我上载此库时,就会包含my library common
代码
这有意义吗
谢谢。您需要使用gradle提供的产品风味(或技术构建变体)功能 在构建文件中定义产品风格
参考:您需要使用gradle提供的产品风味(或技术构建变体)功能 在构建文件中定义产品风格
Ref:您好,谢谢您的评论。我想知道这在我的情况下是如何起作用的。现在我使用的是顶级模块,而您指的是构建变体。我的库没有打包然后上载。它们通过Sonatype和maven-push上传到Gradle。Gradle脚本:我认为作为一种解决办法,我可以将我的公共代码库推送到maven,然后将其包含在我的公共库中,而不是直接编译项目。@非常推荐Nick使用可传递依赖项。但即使你正在通过gradle进行maven推送,这也应该有效。大多数文档都谈到了应用程序的产品风格,但它也适用于库代码。唯一改变的是你平常的身材。gradle基本上一次检查选择了哪种口味,一次将aar文件推送到maven central。我开始尝试在构建文件中实现产品口味。然而,由于这是一个库而不是一个标准应用程序,我在设置flavors的应用程序ID时遇到了一个错误。我不确定是否有可能以这种方式拥有一个库的多个变体。嗨,谢谢你的评论。我想知道这在我的情况下是如何起作用的。现在我使用的是顶级模块,而您指的是构建变体。我的库没有打包然后上载。它们通过Sonatype和maven-push上传到Gradle。Gradle脚本:我认为作为一种解决办法,我可以将我的公共代码库推送到maven,然后将其包含在我的公共库中,而不是直接编译项目。@非常推荐Nick使用可传递依赖项。但即使你正在通过gradle进行maven推送,这也应该有效。大多数文档都谈到了应用程序的产品风格,但它也适用于库代码。唯一改变的是你平常的身材。gradle基本上一次检查选择了哪种口味,一次将aar文件推送到maven central。我开始尝试在构建文件中实现产品口味。然而,由于这是一个库而不是一个标准应用程序,我在设置flavors的应用程序ID时遇到了一个错误。我不确定是否有可能以这种方式拥有一个库的多个变体。
...
android {
...
defaultConfig { ... }
signingConfigs { ... }
buildTypes { ... }
productFlavors {
main {
applicationId "com.buildsystemexample.main"
versionName "1.0"
}
my-library {
applicationId "com.buildsystemexample.lib"
versionName "1.0"
}
my-library-wear {
applicationId "com.buildsystemexample.lib-wear"
versionName "1.0"
}
}
}
...