使用Android Studio的Android库项目

kal*_*ehv 34 android android-library android-studio

这个问题可能已在某处得到解答,但找不到合适的问题.

我想知道如何在Android Studio中创建一个通用的实用程序库项目.我想在其中编写一些常用类和一些常用方法,以便在Android应用程序项目中使用.可能就像Windows世界中的.dll一样 - 一组可以在多个消费者之间共享的常用方法.

提前致谢.

pyu*_*s13 27

最简单的方法:

  1. 在Android Studio中右键单击您打开的项目,然后选择 New > Module

  2. 在左侧窗格中选择Android库,然后单击下一步.

  3. 输入所有详细信息,取消选中创建活动,主题和所有(如果不需要).

  4. 选择与项目相同的API级别,然后选择Next,Next,Next.

现在,您将在项目中看到另一个目录,build.gradle因为库将自动为您配置.

如果您的模块/库名称是"mylibrary",

include ':mylibrary' 
Run Code Online (Sandbox Code Playgroud)

将自动添加到项目根目录下的settings.gradle文件中.

现在打开主模块并在依赖块中插入此行:

compile project(':mylibrary')
Run Code Online (Sandbox Code Playgroud)

如果要在其他项目中使用相同的库,则必须使用"文件浏览"将库模块复制到该特定项目,并且必须手动配置settings.gradle和main模块的build.gradle.

  • 因此,如果我想在多个项目中重用库,我必须复制每个项目中的代码?我一直在使用库来避免这种情况......我可以通过符号链接解决这个问题,但是有没有更好的解决方案(如在Eclipse中,库项目位于项目之外的单独文件夹中) ? (14认同)

jus*_*vdk 19

一个老问题,但即使是现在似乎也不是AndroidStudio中的库的支持者解决方案.我一直在考虑将迁移步骤推进一段时间,这就是我发现的.

我的"解决方案"

假设我们有一个包含共享代码的库(称为lib)和一个想要使用所述库代码的Application项目(称为app).

关键是settings.gradle在Project的根目录中定义一个项目(/Some/Path/MyProjects/Project/settings.gradle)这个文件应该已经存在并包含类似的内容include ':app'.

我们将修改此文件以包含库并使用以下两行定义库:

/Some/Path/MyProjects/Project/settings.gradle

...
// tell gradle we want to include a module called 'lib'
include 'lib'
// tell gradle there is a module called 'lib', found in a specific directory
// Note the /app on the end, the project structure wraps a project around a module, you want to refer that module!
project (':lib').projectDir = new File('/Some/Path/MyProjects/Library/app')
...
Run Code Online (Sandbox Code Playgroud)

还要编辑项目build.gradle /Some/Path/MyProjects/Project/app/build.gradle以依赖新添加的模块lib

/一些/路径/ MyProjects下/项目/应用/ build.gradle`

...
dependencies {
    ...
    compile project (':lib') // we want to depend on our library
}
...
Run Code Online (Sandbox Code Playgroud)

额外

当与多个开发人员合作时或为了灵活性,我gradle.properties在我的.gradle目录中使用my (对于通常在homedir中找到的基于*nix的系统,不确定Windows在哪里查找它).请注意,您可能需要创建的目录和文件自己.

在此文件中,您可以创建可在整个gradle文件中使用的常量(如果您愿意).例如,我的包含如下内容:

theconstant=/Some/Path/MyProjects/Library/app
Run Code Online (Sandbox Code Playgroud)

注意看似缺失的引号(不确定那是否真的需要)现在我们可以替换

project (':lib').projectDir = new File('/Some/Path/MyProjects/Library/app')
Run Code Online (Sandbox Code Playgroud)

project (':lib').projectDir = new File(theconstant)
Run Code Online (Sandbox Code Playgroud)

现在,您和您的团队可以定义此常量(可能因机器而异)并相应地更改路径.

利弊

  • 没有整个图书馆的应对!
  • 灵活性,您可以在项目的窗口中编辑库
  • 处理相同项目的多个开发人员可以定义自己的路径
  • 库在项目编译时编译(BuildConfig.DEBUG!)

缺点

  • 到目前为止没有

我没有找到机会正确测试这个,但这似乎是目前最优雅的解决方案!我想听听你对此的看法.