Android IntelliJ+;吉特+;子模块->;你把.iml放在哪里?

Android IntelliJ+;吉特+;子模块->;你把.iml放在哪里?,android,git,intellij-idea,git-submodules,Android,Git,Intellij Idea,Git Submodules,请注意:不使用Gradle/Maven。 场景: 典型的Android应用程序需要Facebook SDK,您有几个选项: 将SDK克隆到磁盘中的某个位置,将/facebook android SDK/facebook(库的android src代码所在位置)的内容复制到/myapp/facebook中。例如,导入IntelliJ中的模块,将其指向新的/myapp/facebook路径并结束。IntelliJ将创建一个facebook.iml(并将修改您的project.properties和其

请注意:不使用Gradle/Maven。

场景:

典型的Android应用程序需要Facebook SDK,您有几个选项:

  • 将SDK克隆到磁盘中的某个位置,将
    /facebook android SDK/facebook
    (库的android src代码所在位置)的内容复制到
    /myapp/facebook
    中。例如,导入IntelliJ中的模块,将其指向新的
    /myapp/facebook
    路径并结束。IntelliJ将创建一个facebook.iml(并将修改您的project.properties和其他
    .idea
    相关文件以说明此新模块)。然后,您可以将这个新模块添加到存储库中,并将其视为任何其他库
  • 克隆应用程序目录中的SDK,例如:
    /myapp/facebook android SDK/*
    ,然后在IntelliJ中导入一个模块,将其指向此新路径并将其视为另一个git存储库(您甚至可以从facebook获取新更改,尽管有时这可能会破坏模块)
  • 创建一个指向Facebook SDK的github repo的git子模块,在IntelliJ中导入一个指向该子模块的模块,很可能在
    /myapp/Facebook android SDK/*
    中正确导入 在继续之前,让我们先看看每种方法的一些特定方面:

  • 优点:这是一种既省力又干净的方法,您甚至可以随意更改SDK,因为您只导入了库,并且拥有源代码缺点:要跟上最新的信息,很繁琐。每次有新的FacebookSDK更新时,您都必须手动更新外部克隆、复制SDK和/或重新添加模块(并确保这些功能正常!)。如果你有局部变化,事情就更难了
  • 优点:比#1更容易更新,但您不能真正提交更改(除非您创建了fork),因为我们没有对FacebookSDK的写入权限缺点:你的
    facebook.iml
    和其他东西在git中总是“脏”的,因为你不能提交它(因为它是不同的回购协议)
  • 优点:就技术而言,这是最干净的方法,通过使用子模块,让git指向正确的存储库,并正确地对待它,您正在做“正确的事情”缺点:如果不小心对待子模块,子模块是……非常精细的,但这与#2的规则相同,除非您的子模块是您可以控制的分支,否则您无法更改FacebookSDK并承诺它,这就给你留下了当你把模块添加到你的项目中时IntelliJ创建的
    facebook.iml
    ,在子模块目录中漫游的问题…这就引出了一个问题
  • 如果您无法提交子模块,因为您没有权限(如FacebookSDK),那么您可以将IntelliJ放入每个新模块的module.iml(本例中为facebook.iml)放在何处(以及如何放置),以便其他用户可以克隆您的存储库,执行
    git子模块初始化
    git子模块更新
    ,不会出现典型的IntelliJ“问题加载模块”错误。上述问题的解决方案在于每个新用户克隆,必须对“从项目中删除facebook”说“是”,然后再次添加/导入模块(如果依赖项尊重名称,则正确保存其他模块的依赖项,因此这很好)