【问题标题】:Migrating from Eclipse to Android Studio and library issues从 Eclipse 迁移到 Android Studio 和库问题
【发布时间】:2015-05-12 16:49:52
【问题描述】:

我决定将我的项目从 Eclipse 迁移到 Android Studio,但我发现这样做有很多困难。我遇到的最大问题如下:

我有几个应用程序正在使用一些常见的项目(库)。将应用程序导入 Android Studio 时,它会检测引用的库并将它们添加到应用程序中(复制应用程序文件夹下的库文件夹)。这是我不想做的事情,因为这些库对于 1 个以上的应用程序是通用的,所以我希望它们与应用程序文件夹位于同一目录级别,并且只从应用程序中引用它们。这是如何在 Android Studio 中完成的?在 Eclipse 中,您只需从项目属性中添加一个引用。此外,如何在 Android Studio 中导入库项目?我想将每个库作为单独的项目导入并单独构建。

有什么好的教程吗?我对 Eclipse 有很多经验,但我对 Gradle 完全陌生。

这是我的意思的一个例子:

我有两个项目,ProjectA 和 ProjectB。他们都使用我开发的一些图书馆项目,LibA 和 LibB。所有 4 个项目都位于名为 Applications 的同一文件夹下 - 因此这两个库是通用的,如果我更改其中一个,我只需要重新编译这两个项目。将 ProjectA 导入 Android Studio(具有最新版本)后,导入过程创建了以下结构。在基本文件夹 Studio Applications 下,我有一个名为 ProjectA 的项目文件夹。在文件夹 ProjectA 下,我有另一个文件夹 ProjectA(主要项目文件所在的位置)和另外两个文件夹 LibA 和 LibB。我想要的是分别导入两个库项目(作为 Android Studio 中的库项目),并且在主应用程序文件夹下只有 ProjectA 文件夹(以及其余的标准 gradle 文件夹,即 .gradle、.idea ,构建等)。

如何做到这一点?我需要两件事:首先,将一个库项目从 Eclipse 导入 Android Studio,然后导入一个项目,但不要将库复制到项目路径下,而是引用它们。

【问题讨论】:

  • 你使用什么库?它们中的大多数都在 .aar 中,并且在 maven Central 中可用。你需要在android studio中配置build.gradle
  • 我已经对我的原始问题进行了解释,它应该可以清楚地说明问题。有些库来自 Google,例如 SlidingMenu 库,有些是我在 Eclipse 中开发的库,所以它们是标准的 Eclipse 项目,标记为库。在 .aar 和 maven Central 中可用是什么意思?你能解释一下吗? Android Studio中build.gradle文件是如何配置的?

标签: android eclipse android-studio gradle


【解决方案1】:

只需导入没有项目库的应用(我假设库在 maven 中可用)

之后你只需要在 gradle 文件中添加依赖项

// your gradle file inside your app folder
dependencies {
    compile 'com.squareup.okhttp:okhttp:2.3.0' // example of importing okhttp
    compile 'com.facebook.android:facebook-android-sdk:4.1.1' // example importing facebook sdk
    compile project(':name_of_local_project') // local project
}

如果你想包含另一个文件夹的项目(不同的项目)

将此添加到settings.gradle

project(':module1').projectDir = new File(settingsDir, '../another_path')

这是一种更简单的方法,您无需太多工作即可更新库

【讨论】:

  • 但是如果我在 Android Studio 中打开了我的主应用程序,我该如何导入一个库?我应该如何处理应用程序文件夹下已经导入的文件(当我将主项目从 Eclipse 导入 Android Studio 时会发生这种情况 - 每个库项目都复制到主应用程序文件夹下)。
  • 请注意,我已经对我的原始问题进行了解释,它应该可以清楚地说明问题。
  • 我已经编辑了我的答案,如果你想包含本地库,你可以使用 compile project cmd 来完成
  • 但是如果我希望公共库模块/项目位于主应用程序的路径之外(以便它可以被多个应用程序使用),那么上面的方法应该不起作用。我认为解决方案是这里描述的解决方案:stackoverflow.com/questions/17479076/…
  • 为了让使用它的应用程序“识别”导入的模块,我需要做些什么吗?上述方法有效,我可以看到导入的模块与应用程序(根)处于同一级别,但是在构建模块时,主应用程序引用的导入模块中的任何类都无法识别。我已经在应用程序中检查了对它的引用,它看起来没问题。
【解决方案2】:

问题是我也为库模块启用了 proguard。 Proguard 混淆了库模块中的类和函数名称,并且在引用它们的应用程序中找不到它们。解决方案是在应用中移动/合并 proguard 文件。

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多