Android

Unsupported Modules Detected - Compilation is not supported for following modules

Android studio 多个项目共享同一个或多个模块的时候很容易出现这个错误。举个简单的例子,假设你有一个模块叫IBase,这个模块包含了网络请求、文件下载上传、正则、工具、以及BaseActivity、BaseFragment等等,然后在多个项目里共享这个模块。那么,一个简单的办法就是打包发布到 maven ,这个办法不错,但是修改很麻烦,尤其是 IBase 并不稳定 需要不断完善的时候,这非常影响开发效率。另一个办法就是共享模块。

我们说共享模块这个吧,这个很简单,只需要修改 settings.gradle ,比如:

include ':app',':ibase',':tmalltv',':common',':ijkplayer-armv7a', ':ijkplayer-x86',':ijkplayer-java', ':ijkplayer'
rootProject.name='mowan-course'
project(":ibase").projectDir = new File("../lego/ibase")
project(":ijkplayer-armv7a").projectDir = new File("../lego/ijkplayer-armv7a")
project(":ijkplayer-x86").projectDir = new File("../lego/ijkplayer-x86")
project(":ijkplayer-java").projectDir = new File("../lego/ijkplayer-java")
project(":tmalltv").projectDir = new File("../lego-tv-android/tmalltv")
project(":common").projectDir = new File("../lego-tv-android/common")

没错,就这么简单,比如:

project(":common").projectDir = new File("../lego-tv-android/common")

这句就指定 common 这个模块的路径不是当前目录下的 common 而是 上一级目录下 的 lego-tv-android 目录下 的 common,等于 common 模块 复用 lego-tv-android 项目里的 common 模块。其他的与这个类似,就不逐一解释了。

但是这样子做,Android studio 可能会有警告,注意右下角,而且项目目录结构也可能混乱,警告大致如下:

Unsupported Modules Detected: Compilation is not supported for following modules: xxx

你可以 Google 下,应该能找到这个:android-studio-error-unsupported-modules-detected-compilation-is-not-supported,你应该能找到解决之道:

1- close the project

2- close Android Studio IDE

3- delete the .idea directory

4- delete all .iml files

5- open Android Studio IDE and import the project

但是这个方案会把我们针对项目的个性化设置给删了,比如 kotlin 的格式化方式啦,没有翻译报错啦等等。我一直苦恼与此,可能不止一年吧,今天解决了,分享下,其实,只需要删除 .idea 目录下的 modules.xml 文件即可,这个文件 下次 打开 Android studio 会重建,你可以打开这个文件看看,应该会明白为什么各种错乱了,不知是什么缘故,错误的把其他项目的其他模块也写到这个里面了,这就导致了错乱。另外,如果你模块下面有多个 .iml 文件,比如 app.iml ,mowan-course-app.iml 文件(这里 mowan-course 是项目名)那么删除后者,其他模块也是如此,当然,这个不删也ok!我现在在想,如何自动去删除这个错误的 modules.xml 文件呢,这样子就方便很多了。

full-stack-trip

Share
Published by
full-stack-trip

Recent Posts

Android 自定义 View 入门

说来惭愧,工作数年,连基本的自…

4 年 ago

retrofit 同时支持 xml 和 json

retrofit 解析 jso…

4 年 ago

mysql - 存储过程 从入门到放弃

最近有个报表的需求,于是乎用了…

4 年 ago

奶嘴战略 - 你不得不知道的扎心真相(一)

一句:英雄枯骨无人问,戏子家事…

4 年 ago

acme.sh 的简单使用

acme.sh 是纯 shel…

4 年 ago

wrk -更现代化的http压测工具

wrk 是一款更现代化的 ht…

4 年 ago