[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 文件中,你可以添加外部库的依赖:

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'
}

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

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

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 语言特性:

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 的命令行工具来生成一个基本的项目结构。例如:

$ 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 等。

<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 来处理网络请求,你可以这样添加:

<dependency>
    <groupId>com.squareup.retrofit2</groupId>
    <artifactId>retrofit</artifactId>
    <version>2.9.0</version>
</dependency>

4. 构建和运行

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

$ 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 中心仓库或其他常见仓库中的依赖。

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

1. 在项目中启用 JitPack

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

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}

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

2. 添加依赖

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

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

dependencies {
    implementation 'com.github.SomeUser:SomeLibrary:v1.0'
}

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

dependencies {
    implementation 'com.github.SomeUser:SomeLibrary:commit-hash'
}

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 如何处理项目的外部依赖和设置。

# 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 配置:

# 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 应用,可以使用如下命令:

# 构建 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 文件:

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 配置:

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 代码的使用是出于性能必要性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/599026.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信锐交换机简介及应用说明(1)

交换机关键参数及分类 1.线速 线速是指交换机的端口上每秒钟传输的bit数&#xff0c;单位为bps&#xff08;bit per second&#xff0c;即每秒传输多少bit&#xff0c;一个bit也就是一个二进制数0或者1&#xff09;。以我们常见的例子来说明的话&#xff0c;比如100M的网卡就…

ComfyUI中图像亮度/对比度/饱和度处理

用上面这个节点可以同时设置图片的亮度、对比度和饱和度。 【保姆级教程】一口气分享在ComfyUI中常用的30多种基本图像处理方式 更多好玩且实用AIGC工作流和节点 星球号&#xff1a;32767063 本期资料链接 往期学习资料 整理AI学习资料库

【容器】k8s获取的节点oom事件并输出到node事件

在debug k8s node不可用过程中&#xff0c;有可能会看到: System OOM encountered, victim process: xx为了搞清楚oom事件是什么&#xff0c;以及如何产生的&#xff0c;我们做了一定探索&#xff0c;并输出了下面的信息。&#xff08;本文关注oom事件是如何生成&传输的&a…

uniapp的app端软件更新弹框

1&#xff1a;使用html PLUS实现&#xff1a;地址HTML5 API Reference (html5plus.org)&#xff0c;效果图 2&#xff1a;在app.vue的onLaunch生命周期中&#xff0c;代码如下&#xff1a; onLaunch: function() {let a 0let view new plus.nativeObj.View(maskView, {backg…

mib browser读取mib文件的oid(飞塔防火墙为例)

在配置zabbix监控的时候,配置监控项最为麻烦,一般我们都会套用模板,这种方式比较简单,但是有些设备就是没有现成的zabbix模板,怎么办? 今天我们使用MIB Browser来获取设备SNMP的OID,然后加入zabbix 。 1.什么是MIB Browser SNMP客户端工具MIB Browser, 全名iReasonin…

#LLM入门 | langchain | RAG # 4.3_文档分割

上一章讨论了文档标准化加载&#xff0c;现在转向文档的细分&#xff0c;这虽简单却对后续工作有重大影响。 一、为什么要进行文档分割 模型大小和内存限制&#xff1a;大型GPT模型参数众多&#xff0c;需大量计算和内存&#xff0c;而硬件设备如GPU或TPU有内存限制&#xff…

Vscode 实现代码跳转功能

随笔 目录 1. 安装Python 2. 安装Pylance 3. 选择解释器 1. 安装Python 2. 安装Pylance 3. 选择解释器 到此即可实现跳转功能

Pytorch学习笔记——神经网络基本框架

一、神经网络是什么 神经网络在人工智能和深度学习的领域&#xff0c;一般称为人工神经网络&#xff0c;即ANN(Artificial Neural Network)&#xff0c;是一种模仿人脑神经系统工作方式的计算模型。被广泛应用于人工智能、自动控制、机器人、统计学等领域的信息处理中。 二、…

图像处理之PCA(C++)

图像处理之PCA&#xff08;C&#xff09; 文章目录 图像处理之PCA&#xff08;C&#xff09;前言一、PCA原理1.原理思想2.实现步骤 二、代码实现总结 前言 在科研、工程应用中&#xff0c;我们往往所获取的数据都包含着很多冗余的信息&#xff0c;这些冗余的信息会对我们分析数…

CP AUTOSAR之CANXLDriver详细说明(正在更新中)

本文遵循autosar标准&#xff1a;R22-11 1 简介及功能概述 本规范描述了AUTOSAR 基础软件模块CAN XL 驱动程序的功能、API和配置。   本文档的基础是[1,CiA610-1]和[2,CiA611-1]。假设读者熟悉这些规范。本文档不会再次描述CAN XL 功能。   CAN XL 驱动程序是最低层的一部…

【七十六】【算法分析与设计】2435. 矩阵中和能被 K 整除的路径,87. 扰乱字符串,三维动态规划

2435. 矩阵中和能被 K 整除的路径 给你一个下标从 0 开始的 m x n 整数矩阵 grid 和一个整数 k 。你从起点 (0, 0) 出发&#xff0c;每一步只能往 下 或者往 右 &#xff0c;你想要到达终点 (m - 1, n - 1) 。 请你返回路径和能被 k 整除的路径数目&#xff0c;由于答案可能很大…

【Python爬虫实战入门】:全球天气信息爬取

文章目录 一、爬取需求二、所需第三方库2.1 简介 三、实战案例四、完整代码 一、爬取需求 目标网站&#xff1a;http://www.weather.com.cn/textFC/hb.shtml 需求&#xff1a;爬取全国的天气&#xff08;获取城市以及最低气温&#xff09; 目标url&#xff1a;http://www.weath…

数字孪生技术在垃圾焚烧处理中的可视化应用

在迈向智慧城市的进程中&#xff0c;数字孪生技术在垃圾处理领域展现出了巨大潜力。特别是在垃圾焚烧过程的管理和优化上&#xff0c;数字孪生垃圾焚烧可视化技术已成为一项革命性的进步。 通过 HT 构建虚拟的垃圾焚烧模型&#xff0c;实时映射和模拟实际焚烧过程中的各项关键…

QT+网络调试助手+TCP服务器

一、UI界面设计 二、单线程 代码设计 1、 查找合法的本地地址&#xff0c;用于当作服务器的IP地址 #include <QThread> #include <QTcpSocket> #include <QNetworkInterface> #include <QMessageBox>QList<QHostAddress> ipAddressesList QNe…

抖音短视频矩阵系统技术源头/源代码开发部署/SaaS贴牌/源码api代开发

抖音短视频矩阵系统技术源头/源代码开发部署/SaaS贴牌/源码官方平台api授权代开发 一、短视频矩阵系统源码开发步骤 短视频矩阵系统的源头开发步骤通常包括以下几个关键阶段&#xff1a; 1.需求分析&#xff1a;明确系统的目标用户、功能需求、性能要求等。 2.系统设计&…

bite阶段性测试_数据结构

解决问题之前我们要了解什么是度&#xff0c;特别是二叉树中的度&#xff0c;和图论中的度的定义是不同的 什么是度&#xff1a; 在图论中&#xff0c;一个节点&#xff08;或称为顶点&#xff09;的“度”是指与该节点直接相连的边的数量。度是用来衡量一个节点与其他节点连接…

Python:实现b站登录并保存登录信息(baidu Comate插件帮助我逐行分析代码)

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

O2OA(翱途)支持高斯_openGauss,瀚高_HighGo,磐维_panweidb等各种国产postgres分支数据库接入

O2OA&#xff08;翱途&#xff09;作为一款企业级应用平台&#xff0c;其支持多种数据库系统是其灵活性和可扩展性的重要体现。从MySQL、Oracle到国产的达梦、神州等数据库&#xff0c;再到对PostgreSQL的原生支持&#xff0c;O2OA展现了其对不同数据库环境的良好适应性。特别地…

LeetCode 难题解析 —— 正则表达式匹配 (动态规划)

10. 正则表达式匹配 思路解析 这道题虽然看起来不难理解&#xff0c;但却存在多种可能&#xff0c;当然这种可能的数量是有限的&#xff0c;且其规律对于每一次判别都使用&#xff0c;所以自然而然就想到用 动态规划 的方法啦 接下来逐步分析可能的情况&#xff1a; &#x…

stm32f103zet6_DAC_2_输出电压

实现效果 DAC输出的电压 同过电压表测量电压 1.DAC配置的步骤 初始化DAC时钟。配置DAC的GPIO端口。设置DAC的工作模式&#xff08;例如&#xff0c;是否使用触发功能&#xff0c;是否启用DAC中断等&#xff09;。启动DAC。 2常用的函数 函数 HAL_DAC_Start() - 开启指定…