【问题标题】:Can I reference another app to android studio?我可以将另一个应用程序引用到 android studio 吗?
【发布时间】:2017-12-13 00:03:19
【问题描述】:

假设我有 5 个不同的应用程序。他们都需要实施反馈表。

我正在考虑编写一个新的通用应用程序,它有一个反馈表和一些其他活动,以便我的所有应用程序都能够使用它。我的最终目标是打电话给startActivityForResult(),然后让反馈表应用程序处理所有事情。

我不知道如何设置这一切。我尝试从其中一个应用程序创建一个新模块,但最终所有 5 个应用程序都有不同的模块副本,这使得未来的修改变得困难。我还尝试创建一个新项目,然后按照here 的描述引用它。 Android工作室投诉

无法解决依赖关系 ':app@debugAndroidTest/compileClasspath': 无法解析项目 :反馈表。打开文件显示详情

具体应该怎么做?

已编辑

我的settings.gradle:

include ':feedbackform'
project(':feedbackform').projectDir = new File('../FeedbackForm/app')

添加以上内容后,Android studio 会在我的 gradle 中创建compile project(path: ':feedbackform')

我忘记提及的一件事是我不想将它们中的任何一个上传到云端。一切都应该保持在本地。

【问题讨论】:

  • 您可以将公共库发布到 Github,并使用 JitPack 将其作为依赖项包含进来
  • 或者您可以将:feedbackform 添加到settings.gradle,然后将compile project(:feedbackform) 添加到build.gradlestackoverflow.com/questions/38877989/…
  • 创建一个 AAR 文件,并在项目之间共享。如果您希望通过 Gradle 添加和升级,也可以使用 Apache Archiva 或 Nexus 来托管您的工件
  • @cricket_007 这就是我所做的。请看我编辑的帖子。
  • 我忘了说我想把所有东西都保留在本地

标签: android android-studio android-gradle-plugin


【解决方案1】:

您可以使用 Gradle Android Maven plugin 创建一个模块并将其作为库安装到本地 maven。

怎么办?

首先,将 maven 插件添加到您的库模块 build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
    }
}

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'

android {
 ...
}

其次,将group名称添加到您的库模块build.gradle:

group = 'com.your.packagename'
version = '1.0.0'

会是这样的:

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'

group = 'com.your.packagename'
version = '1.0.0'

android {
  ...
}

要将库安装到本地 maven,您可以运行:

./gradlew install

或者使用Android Studio右侧边栏的Gradle工具:

Gradle->YourLibraryProject->其他->安装

它将被安装为:

com.your.packagename:librarymodulename

第三,要在您的应用中使用它,您需要将mavenLocal() 添加到您的root build.gradle:

allprojects {
  repositories {
    jcenter()
    mavenCentral()
    mavenLocal() // for local maven.
  }
}

然后将库添加为依赖项:

implementation "com.your.packagename:librarymodulename:1.0.0"

第四次,完结了。

【讨论】:

  • 真的吗?有没有更简单的方法?这基本上使简单的事情变得如此复杂。
  • 通过这样做,您甚至可以将模块拆分为单个项目。在您完成一次之前,它看起来很复杂。
【解决方案2】:

我忘记提及的一件事是我不想将它们中的任何一个上传到云端。一切都应该保持在本地。

鉴于您的限制,为什么不将反馈表单作为一个独立的应用程序,然后使用 Intents like this 从您的其他 5 个应用程序调用它?这样您就可以避免处理本地项目文件的麻烦,因为您不想将它们上传到云端。

如果您有本地存储库,另一种选择是使用 Git Submodules 或 SVN Externals 之类的东西,这样每当您对反馈表单存储库进行更改时,您都可以依靠源代码控制工具在其他项目中更新它们。

【讨论】:

  • 因为这是一个反馈表,会被多次调用。在应用程序之间切换并不理想。要求用户安装 2 个单独的应用程序也是没有意义的。
  • 从技术角度来看,这对您来说是“最简单”的解决方案,如果不是这样,那么您可能需要查看给出的其他建议,例如:使用本地 maven 分发表单项目作为一个库,使用 git 子模块或 svn 外部,生成一个 AAR 文件以跨项目使用或从外部项目定位本地文件。如果这些都不能解决您的问题,那么您可能必须复制您的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多