多个项目共用模块

在Android Studio中,为了解决多个项目重复代码的问题,通常会创建library模块。本文介绍了两种方法实现模块共享:一是简单地复制模块到每个项目;二是设置所有项目共享同一模块。方法二更高效,避免了重复拷贝。文中详细步骤指导如何配置settings.gradle和build.gradle文件,以解决模块引用问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在开发中可能会遇到同时开发几个app的情况,而这几个app在某些地方是相同的,而我们通常的做法是将相同的部分抽成一个library。这在eclipse中是很好实现的,而在Android studio中,我们一般都是抽成module,而一般这些module还是放在项目的根目录下的,要在另一个项目中使用,怎么办呢?

  • 方法一:

将module拷贝到另一个项目的根目录下,在其settings.gradle 文件中的include 后面添加模块名。比如原来只有

include ':app'

然后我们添加一个utils模块:

include ':app',':utils'

最后别忘了在app那个build.gradle文件中的dependencies加上

compile  project(":utils")

大家应该发现了,这种办法挺笨的,如果一个app中的module有代码上的改变,就要将有改变的module拷贝,然后覆盖未被改变的module。

其实我们有更好的办法,让两个app指向同一个module。

  • 方法二:

我们在app的根目录的的同级目录(也就是你项目所在的目录),建立一个新的文件夹,比如命名为library,然后把module拷贝进去,在两个app的settings.gradle 文件中的include 后面修改或添加模块名。比如原来是

include ':app', ':pushsdk'

我们改成:

include ':app', ':pushsdk'
project(':pushsdk').projectDir = new File("../library", 'pushsdk')

之后我们就可以共用这个library中的module了,是不是方便了很多(当然,两个项目得在同一个文件夹里面,library也在这个文件夹里面)。

当有多个Module,并且Module又依赖于另一个Module时(嵌套Module),比如

include ':app', ':photochooselibrary', ':mynciclib', ':sharesdk'
project(':photochooselibrary').projectDir = new File("../library", 'photochooselibrary')
project(':mynciclib').projectDir = new File("../library", 'mynciclib')
project(':sharesdk').projectDir = new File("../library", 'sharesdk')
//这里是嵌套的,具体就不写了

然后只需要在App里的build.gradle里配置一行代码即可

 compile project(':sharesdk')

如何出现问题一,如下

Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute application@label value=(@string/app_name) from AndroidManifest.xml:8:9-41
    is also present at [:sharesdk] AndroidManifest.xml:15:9-45 value=(@string/dummy_button).
    Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:5:5-19:19 to override.

这里应该也好理解,我就直接给出解决方案,只需在配置里配置这行代码

 xmlns:tools="http://schemas.android.com/tools"
我的是这样
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.zdk.multimoduletest">

最后在Application配置这行即可

 tools:replace="android:label,android:theme,android:icon"
我的是这样
 <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:label,android:theme,android:icon">

如果出现问题二:不能找到module:
首先将build.gradle(app)中的代码注释:

// compile project(':sharesdk')

然后对settings.gradle中的嵌套modele一条一条添加:

第一步:

include ':app',':photochooselibrary'
project( ':photochooselibrary').projectDir = new File('../library','photochooselibrary')

第二步:

include ':app',':photochooselibrary',':mynciclib'
project( ':photochooselibrary').projectDir = new File('../library','photochooselibrary')
project( ':mynciclib').projectDir = new File('../library','mynciclib')

第三步:

include ':app',':photochooselibrary',':mynciclib',':sharesdk'
project( ':photochooselibrary').projectDir = new File('../library','photochooselibrary')
project( ':mynciclib').projectDir = new File('../library','mynciclib')
project( ':sharesdk').projectDir = new File('../library','sharesdk')

当项目左边目录显示

build.gradle(Module:app)
build.gradle(Module:mynciclib)
build.gradle(Module:photochooselibrary)
build.gradle(Module:sharesdk)

说明成功了!然后将build.gradle(app)中的代码注释取消就可以了:

 compile project(':sharesdk')

好了,就到这里吧!


Android Studio如何引用外部Library工程

(http://www.tuicool.com/articles/7JfQV3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值