[Android]常见的包管理方式

在Android开发中,包管理主要是通过构建和依赖管理工具来处理。下面列举了几种最常见和主流的包管理方式:

一、Gradle

Gradle 是 Android 官方推荐的构建工具,几乎成为了 Android 开发的标准。它支持自定义构建逻辑、依赖管理、多项目构建等,与 Android Studio 有很好的集成。

Gradle 是一个强大的构建系统,被广泛用于 Android 项目,特别是在使用 Kotlin 进行开发时。它不仅管理项目的构建过程,还处理依赖管理和其他自动化任务。

以下是如何在使用 Kotlin 开发 Android 应用时,通过 Gradle 进行包管理的介绍:

1. Gradle 配置文件

在 Android 项目中,主要有两种类型的 Gradle 配置文件:

  • 项目级别的 build.gradle (通常位于项目根目录):这个文件配置了整个项目范围内的设置,如 Gradle 插件版本和其他配置。
  • 模块级别的 build.gradle (位于 app 或其他模块的目录下):这个文件负责配置特定于模块的设置,包括依赖关系、SDK 版本等。

2. 添加依赖

在模块级别的 build.gradle 文件中,你可以添加外部库的依赖:

Kotlin 复制代码
dependencies {
    // Kotlin 标准库
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

    // AndroidX 核心库
    implementation 'androidx.core:core-ktx:1.6.0'

    // 添加其他库,例如 Retrofit 网络库
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

    // 测试库
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

在Android开发中,Gradle通常会从几个主要的包管理网站获取依赖库。最常用的包括:

Maven Central:

  • 网站地址 : Maven Central Repository
  • Maven Central 是Java和Android开发中最常用的库和依赖管理系统之一。它包含大量公开可用的库,是开发者查找和引用库的重要资源。

Google's Maven Repository:

  • 网站地址 : Google's Maven Repository
  • 这是Google专门为Android开发者提供的Maven仓库。它包括所有支持库(Support Libraries)、AndroidX和其他Google开发的库,这些库是进行现代Android开发不可或缺的部分。

JitPack:

  • 网站地址 : JitPack
  • JitPack是一个现代的包管理服务,它允许你直接从GitHub等Git仓库中获取Java和Android库。这使得即使库不在Maven Central或其他传统Maven仓库中,也能轻松地作为依赖添加到项目中。

3. 项目级别的 build.gradle 配置

在项目级别的 build.gradle 中,你需要指定 Gradle 插件和其他项目级别的配置:

Kotlin 复制代码
buildscript {
    ext.kotlin_version = "1.5.21"  // 设置 Kotlin 版本
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

4. 同步和构建

在修改了 Gradle 配置或依赖后,你需要同步项目,以便 Android Studio 可以识别这些更改并下载必要的依赖。这可以通过点击 Android Studio 的 "Sync Now" 提示或从菜单中选择 "File" -> "Sync Project with Gradle Files" 来完成。

5. 使用 Kotlin DSL

对于 Kotlin 开发者,还可以选择使用 Kotlin DSL 来编写 Gradle 脚本,这使用的是 .gradle.kts 文件而不是常规的 .gradle 文件。Kotlin DSL 提供了更好的类型安全和 Kotlin 语言特性:

Kotlin 复制代码
plugins {
    kotlin("android")
    kotlin("android.extensions")
}

dependencies {
    implementation(kotlin("stdlib-jdk7"))
    implementation("androidx.core:core-ktx:1.6.0")
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
}

6. 使用变量和版本管理

为了更好地管理依赖版本,你可以在项目级 build.gradle 中定义变量,然后在模块级 build.gradle 中使用这些变量。这样可以确保依赖库的版本一致性并简化维护。

二、Maven

虽然 Maven 在 Android 开发中不如 Gradle 流行,但它在 Java 社区中仍然非常受欢迎,并被用于一些老的 Android 项目。它提供了一种更传统的、基于 XML 的配置方式。

尽管 Gradle 是 Android 开发的首选构建系统,但 Maven 仍然可以用于管理 Android 应用的依赖和构建过程,尤其是在某些企业和遗留项目中。下面是如何在使用 Kotlin 开发 Android 应用时,通过 Maven 进行包管理的介绍。

1. 创建 Maven 项目

首先,你需要一个 Maven 项目。如果你是从零开始,可以使用 Maven 的命令行工具来生成一个基本的项目结构。例如:

bash 复制代码
$ mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

2. 添加 Android Maven 插件

为了使 Maven 支持 Android 应用的构建,你需要在你的 pom.xml 文件中添加 Android Maven 插件。这个插件提供了必要的工具和任务,用于编译 Android 代码、打包 APK 等。

XML 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>apk</packaging>

    <properties>
        <kotlin.version>1.3.72</kotlin.version>
        <android.maven.plugin.version>4.5.0</android.maven.plugin.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>com.simpligility.maven.plugins</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <version>${android.maven.plugin.version}</version>
                <configuration>
                    <sdk>
                        <platform>29</platform>
                    </sdk>
                </configuration>
                <extensions>true</extensions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- Kotlin standard library -->
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
        <!-- Additional dependencies -->
    </dependencies>
</project>

3. 添加依赖

pom.xml 文件的 <dependencies> 部分中,你可以添加所需的库。比如说,如果你想使用 Retrofit 来处理网络请求,你可以这样添加:

XML 复制代码
<dependency>
    <groupId>com.squareup.retrofit2</groupId>
    <artifactId>retrofit</artifactId>
    <version>2.9.0</version>
</dependency>

4. 构建和运行

使用 Maven 构建 Android 项目,你可以使用以下命令:

bash 复制代码
$ mvn clean install

这个命令会编译你的项目、运行测试、并生成 APK 文件。

5. 管理版本和属性

通过在 <properties> 标签中设置版本号和其他常用变量,可以更容易地管理和更新这些值。这在管理多个依赖项的版本时尤其有用。

注意事项

  • 插件支持: Android Maven 插件并不像 Gradle 那样受到广泛支持。确保你使用的插件是最新的,或者至少是兼容目前 Android SDK 版本的。
  • Android Studio 集成: Android Studio 对 Maven 的支持不如对 Gradle 的支持。虽然可以使用 Maven,但可能需要手动调整更多的配置。

三、JitPack

JitPack 是一个简单的包管理服务,它可以将任何 GitHub、GitLab、Bitbucket 或其他公共 Git 仓库中的 Java 或 Android 项目直接转换为 Maven 或 Gradle 可用的库。在使用 Kotlin 开发 Android 应用时,JitPack 提供了一种便捷的方式来引入那些不在 Maven 中心仓库或其他常见仓库中的依赖。

但是请注意,JitPack 默认支持的是 GitHub、GitLab 和 Bitbucket。对于其他托管平台如 Gitee,可能需要一些额外的设置或者不被直接支持。

以下是如何在使用 Kotlin 开发的 Android 应用中通过 Gradle 使用 JitPack 进行包管理的详细步骤:

1. 在项目中启用 JitPack

首先,你需要在项目的根级 build.gradle 文件(项目级别的配置文件)中添加 JitPack 仓库。打开这个文件,找到 allprojects 部分,并在 repositories 块中添加 JitPack 的 URL:

Kotlin 复制代码
allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}

在"settings.gradle.kts"文件中,请添加如下内容:

Kotlin 复制代码
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {
            url = uri("https://jitpack.io")
        }
    }
}

这样配置后,你的项目就可以从 JitPack 仓库中获取依赖。

2. 添加依赖

接下来,在你的模块级别 build.gradle 文件(通常是 app/build.gradle)中添加需要的库作为依赖。你需要知道库的 GitHub 用户名或组织名、仓库名以及版本标签。

假设你想添加一个名为 SomeLibrary 的库,该库由用户 SomeUser 在 GitHub 上维护,并且你想使用标签 v1.0 的版本,你可以这样添加依赖:

Kotlin 复制代码
dependencies {
    implementation 'com.github.SomeUser:SomeLibrary:v1.0'
}

版本可以是特定的发行版标签、提交哈希或者分支名。如果你想依赖一个特定的提交,你可以这样做:

Kotlin 复制代码
dependencies {
    implementation 'com.github.SomeUser:SomeLibrary:commit-hash'
}

对于JitPack不支持的库比如Gitee, 需要处理私有库的权限问题。

由于库是私有的,您需要确保在构建过程中有权限访问这个库。这通常涉及到添加访问令牌或设置 SSH keys。

  • 使用 Access Token

    您可能需要在 JitPack 配置中或在构建服务器上设置环境变量,以使用您的私有访问 token。

  • 使用 SSH Keys

    如果您使用的是本地机器或某些 CI 系统,您可能需要配置 SSH keys 以允许访问 Gitee 的私有仓库。

注意事项:

  • JitPack 兼容性:确保 JitPack 支持从 Gitee 托管的仓库构建,因为 JitPack 主要支持 GitHub、GitLab 和 Bitbucket。
  • 私有库访问:确保您已经正确设置了访问私有库所需的认证方法。
  • 库版本标签:确保您在 Gitee 仓库中对您想要使用的提交使用了正确的版本标签。

3. 同步项目

添加完依赖后,不要忘记同步你的项目。可以通过点击 Android Studio 的 "Sync Now" 提示或从菜单中选择 "File" -> "Sync Project with Gradle Files" 来完成。

4. 使用库

一旦依赖被正确添加和同步,你就可以在项目中使用该库的类和资源了。

常见问题和注意事项

  • 私有仓库:如果你正在使用的库在一个私有的 Git 仓库中,你需要在 JitPack 网站上登录并授权它访问该库。JitPack 将提供一个特定的令牌,你可以在 URL 中使用它来访问私有库。
  • 动态版本:尽管支持使用分支名作为版本,这种做法可能会导致构建不稳定。建议尽可能使用固定的标签或提交哈希。
  • 网络问题:由于 JitPack 是一个在线服务,任何网络问题都可能影响到从 JitPack 拉取依赖的过程。确保你的网络连接稳定。
  • 性能考量:从 JitPack 加载依赖可能比从更常用的 Maven 中心仓库慢,因为如果库不在 JitPack 的缓存中,JitPack 需要实时构建这些库。

四、Bazel

Bazel 是一个由 Google 开发的多语言、快速且可扩展的构建系统,它支持多种编程语言和平台,包括用于 Android 应用开发的 Kotlin。Bazel 的优势在于其高效的依赖管理和增量构建能力,这使得它非常适合大型或多项目(monorepo)环境。

在使用 Kotlin 开发 Android 应用时,使用 Bazel 进行包管理和构建需要遵循以下步骤:

1. 安装 Bazel

首先,你需要在你的开发环境中安装 Bazel。你可以从 Bazel 官方网站下载适合你操作系统的版本,并按照提供的安装指南进行安装。

2. 设置 Android 工程

创建工作区

在你的项目根目录创建一个名为 WORKSPACE 的文件。这个文件告诉 Bazel 如何处理项目的外部依赖和设置。

python 复制代码
# WORKSPACE file

# 加载 Android 规则
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

# 设置 Android SDK 和 NDK(确保已经安装并正确设置环境变量)
android_sdk_repository(
    name = "androidsdk",
    api_level = 29,
    build_tools_version = "29.0.2"
)

# Google Maven 依赖
RULES_JVM_EXTERNAL_TAG = "4.0"
RULES_JVM_EXTERNAL_SHA = "62133c1250...更多SHA值"

http_archive(
    name = "rules_jvm_external",
    strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG,
    sha256 = RULES_JVM_EXTERNAL_SHA,
    url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % RULES_JVM_EXTERNAL_TAG,
)

load("@rules_jvm_external//:defs.bzl", "maven_install")

maven_install(
    artifacts = [
        "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72",
        # 列出其他 Maven 依赖
    ],
    repositories = [
        "https://maven.google.com",
        "https://repo.maven.apache.org/maven2",
    ],
)
定义构建规则

接下来,在你的项目中创建一个或多个 BUILD 文件,这些文件定义了如何构建应用的具体规则。例如,创建一个简单的 Android 应用可能需要以下的 BUILD 配置:

python 复制代码
# BUILD file

load("@rules_kotlin//kotlin:kotlin.bzl", "kt_android_library")

kt_android_library(
    name = "app",
    srcs = glob(["src/main/kotlin/**/*.kt"]),
    resource_files = glob(["src/main/res/**"]),
    manifest = "src/main/AndroidManifest.xml",
    deps = [
        "@maven//:org_jetbrains_kotlin_kotlin_stdlib_jdk8",
        # 添加其他依赖
    ],
)

3. 构建和运行

使用 Bazel 构建和运行你的 Android 应用,可以使用如下命令:

bash 复制代码
# 构建 APK
bazel build //path/to/your/app:app

# 运行
bazel mobile-install //path/to/your/app:app

注意事项

  • 学习曲线:Bazel 拥有较高的学习曲线,特别是对于初学者和小型项目来说,可能会显得复杂。
  • 集成:虽然 Bazel 支持多种语言和平台,但与某些 IDE(如 Android Studio)的集成不如 Gradle。
  • 性能:Bazel 在大型项目中表现出色,尤其是在增量构建和缓存管理方面,可以显著提高构建效率。

五、CMake

对于包含原生 C++ 代码的 Android 应用,CMake 是一个重要的工具。它是 Android Native Development Kit (NDK) 的支持工具之一,用于构建本地代码库。

在开发使用 Kotlin 的 Android 应用时,通常不会直接使用 CMake 进行包管理,因为 CMake 主要用于管理 C++ 代码的构建过程。然而,在 Android 应用开发中,如果你的项目涉及到使用 Kotlin 与 C++ 的交互(即使用 JNI ------ Java Native Interface),那么你可能需要配置 CMake 来构建你的本地(native)代码部分。

以下是如何在涉及 Kotlin 和 C++ 代码的 Android 应用中设置和使用 CMake 的基本步骤:

1. 安装 CMake

确保你的开发环境中已经安装了 CMake。对于 Android 开发,Android Studio 已经包含了需要的 CMake 工具,你只需在 Android Studio 中启用即可:

  • 打开 Android Studio。
  • 进入 "File" > "Project Structure" > "SDK Location".
  • 确认或安装 "CMake"。

2. 配置 CMakeLists.txt

在项目中创建一个 CMake 配置文件,通常命名为 CMakeLists.txt。这个文件将定义如何构建 C++ 源代码。假设你有一些 C++ 源文件需要编译,你可以创建如下的 CMakeLists.txt 文件:

Kotlin 复制代码
cmake_minimum_required(VERSION 3.4.1)  # 指定 CMake 的最小版本

add_library( # 设置库的名称
             native-lib

             # 将库设置为共享库。
             SHARED

             # 提供源文件的相对路径。
             src/main/cpp/native-lib.cpp )

find_library( # 定义变量
              log-lib

              # 指定要查找的系统库。
              log )

target_link_libraries( # 指定目标库
                       native-lib

                       # 目标库需要链接的库
                       ${log-lib} )

3. 更新 build.gradle

接下来,你需要在 build.gradle 文件中配置 CMake。打开模块级别的 build.gradle 文件(例如 app/build.gradle),并添加 externalNativeBuild 配置:

Kotlin 复制代码
android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                // 提供 CMakeLists.txt 文件的路径
                path "CMakeLists.txt"
            }
        }
    }

    // 配置 CMake 的版本和路径
    externalNativeBuild {
        cmake {
            version "3.10.2"
            path "CMakeLists.txt"
        }
    }
}

4. 编译和运行

通过以上设置,当你构建你的 Android 项目时,CMake 会被调用来编译你的 C++ 源代码,并将生成的库与你的应用一起打包。你可以使用 Android Studio 的标准构建和运行按钮来执行这些操作。

注意事项

  • JNI:使用 JNI 时,确保你熟悉 Java 和 C++ 之间的接口关系。正确地处理数据类型转换和生命周期管理是非常重要的。
  • 性能:使用 native 代码可以提高某些类型应用的性能,但同时也增加了复杂性。确保 native 代码的使用是出于性能必要性。
相关推荐
恋猫de小郭5 小时前
Android Studio 正式版 10 周年回顾,承载 Androider 的峥嵘十年
android·ide·android studio
aaaweiaaaaaa8 小时前
php的使用及 phpstorm环境部署
android·web安全·网络安全·php·storm
工程师老罗10 小时前
Android记事本App设计开发项目实战教程2025最新版Android Studio
android
pengyu14 小时前
系统化掌握 Dart 编程之异常处理(二):从防御到艺术的进阶之路
android·flutter·dart
消失的旧时光-194314 小时前
android Camera 的进化
android
基哥的奋斗历程16 小时前
Openfga 授权模型搭建
android·adb
Pakho love1 天前
Linux:文件与fd(被打开的文件)
android·linux·c语言·c++
勿忘初心911 天前
Android车机DIY开发之软件篇(九) NXP AutomotiveOS编译
android·arm开发·经验分享·嵌入式硬件·mcu
lingllllove2 天前
PHP中配置 variables_order详解
android·开发语言·php
消失的旧时光-19432 天前
Android-音频采集
android·音视频