[Kotlin]创建一个私有包并使用

1.创建Kotlin测试项目

  • 在Android Studio或其他IDE中选择“Create New Project”。
  • 选择Kotlin和Gradle作为项目类型和构建系统。
  • 指定项目名称和位置,完成设置。

2.创建Android Library模块

官方文档:创建 Android 库  |  Android Studio  |  Android Developers

 

注意:创建的Library依赖libs.plugins.androidLibrary,所以后续导入时需确保项目级别的build.gradle 有添加androidLibrary这个依赖。

若已有的Library库的话,可以选择Import导入模块。

添加依赖: 如果你的库需要额外的依赖,可以在 build.gradle (Module: app) 文件中添加依赖。例如:

dependencies {implementation(kotlin("stdlib"))
}

配置 Gradle:

  • 版本控制: 确保 build.gradle 文件中设置了正确的版本号和版本配置,这对发布库非常重要。
android {namespace = "com.randomdt.myprivatepackage"compileSdk = 34defaultConfig {applicationId = "com.randomdt.myprivatepackage"minSdk = 24targetSdk = 34versionCode = 1versionName = "1.0.0"testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"vectorDrawables {useSupportLibrary = true}}
}

Manifest 设置: 检查 AndroidManifest.xml 文件,确保所有必要的权限和应用配置都已正确设置。

3.Library开发

创建必要的Kotlin类和功能模块,在 src/main/kotlin 目录下编写代码。

例如,我们创建一个计算类GACalculate

GACalculate:

class GACalculate {// 实例方法:执行加法fun addInstance(a: Int, b: Int): Int {return a + b}companion object {// 类方法:执行加法fun addStatic(a: Int, b: Int): Int {return a + b}}
}

4.测试

具体介绍参考另一文: [Android]单元测试和模块测试-CSDN博客

可以直接在Library写测试用例,也可以去测试项目(模块间可以相互调用)的 src/test/kotlin 目录下编写JUnit测试用例:

import com.randomyyds.mylibrary.GACalculate
import org.junit.Testimport org.junit.Assert.*/*** Example local unit test, which will execute on the development machine (host).** See [testing documentation](http://d.android.com/tools/testing).*/
class ExampleUnitTest {@Testfun addition_isCorrect() {assertEquals(30,  GACalculate().addInstance(10, 20))}
}

4.发布

(1).发布到私有Git仓库

添加所有文件到Git

$ git init
$ git add .
$ git commit -m "Initial commit"

将项目推送到远程私有Git仓库(例如GitHub, GitLab等):

$ git remote add origin <your-private-git-repo-url>
$ git push -u origin master

(2).发布成为公开的包

配置maven-publish插件

plugins {`maven-publish`
}publishing {publications {create<MavenPublication>("mavenJava") {from(components["java"])}}repositories {maven {url = uri("https://your-public-maven-repo.com/repository/maven-releases/")credentials {username = provider { "user" }password = provider { "password" }}}}
}

发布到公开Maven仓库

./gradlew publish

5.在项目中使用该包

(1).Git依赖

如果项目托管在Git上,可以在“settings.gradle.kts”文件中添加"https://jitpack.io"启用 JitPack。

JitPack具体使用参见另一文:[Android]常见的包管理方式-CSDN博客

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

在app/build.gradle中添加库作为依赖

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

dependencies {implementation ("com.github.SomeUser:SomeLibrary:1.0.0")
}

进入仓库网站:https://jitpack.io/ 搜索GitHub仓库地址

(2).本地依赖

在 Kotlin 项目中直接引用本地库,您可以通过几种方式将本地库集成到您的项目中。下面的说明基于您使用 Gradle 作为构建工具,因为 Kotlin 项目通常使用 Gradle。

方法 1: 使用本地 Jar 文件

如果您的库以 Jar 文件的形式存在,您可以直接在项目的 build.gradle 文件中添加对这个 Jar 文件的依赖。

  • 将 Jar 文件放置到您的项目中,例如在 libs 目录下。

  • 在 build.gradle 中添加对这个 Jar 文件的引用:

dependencies {implementation(fileTree("libs") {include("*.jar")})// 或者指定单个文件// implementation(files("libs/your-library.jar"))
}

方法 2: 引用本地项目

如果您的库是一个本地的 Gradle 项目,您可以通过以下方式将其作为依赖项添加:

  • 确保本地库是一个可以独立构建的 Gradle 项目。

  • 在您的主项目的 settings.gradle 文件中包含这个库:

include(":myLocalLibrary")
project(":myLocalLibrary").projectDir = file("../my-private-package/mylibrary")

这里 path_to_your_library 是相对于当前项目的路径。

  • 在主项目的 build.gradle 文件中添加对本地项目的依赖:

dependencies {implementation(project(":myLocalLibrary"))
}

注意:添加上述配置,直接同步会报错,提示缺少androidLibrary

添加androidLibrary

 plugins {alias(libs.plugins.androidApplication) apply falsealias(libs.plugins.jetbrainsKotlinAndroid) apply falsealias(libs.plugins.androidLibrary) apply false
}   
...[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
androidLibrary = { id = "com.android.library", version.ref = "agp" }

然后同步,就会在目录上看到本地库。

方法 3: 使用 Maven 本地仓库

如果您的库已经被安装到本地 Maven 仓库(通常在您运行 mvn install 后),您可以如下引用:

  • 确保本地 Maven 仓库(通常是 .m2 目录)在您的构建配置中被包括。

  • 在 build.gradle 中添加对本地 Maven 仓库中的库的依赖:

dependencies {implementation 'group:artifact:version'
}

替换 groupartifact 和 version 为您的库的实际 Maven 坐标。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拼多多二面,原来是我对自动化测试的理解太浅了

如果你入职一家新的公司&#xff0c;领导让你开展自动化测试&#xff0c;作为一个新人&#xff0c;你肯定会手忙脚乱&#xff0c;你会如何落地自动化测试呢&#xff1f; 01 什么是自动化 有很多人做了很长时间的自动化但却连自动化的概念都不清楚&#xff0c;这样的人也是很悲…

Java面试题:AQS

AQS AbsractQueuedSynchronizer抽象队列同步器 构建锁或者其他同步组件的基础框架 Synchronized和AQS的区别 Synchronized由c实现,悲观锁,自动释放锁,竞争激烈时使用重量级锁,性能较差 AQS由java提供,悲观锁,手动开启关闭,在竞争激烈的情况下提供了多种解决的方案 AQS常见…

openai 开源模型Whisper语音转文本模型下载使用

Whisper Whisper 是一种通用语音识别模型。它是在大量不同音频数据集上进行训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。官方地址 https://github.com/openai/whisper 方法 一个Transformer序列到序列模型被训练在多种语音处理任务上,包括多语…

libcity笔记:

1 __init__ 2 encode 得到的内容如下&#xff1a; data_feature的内容&#xff1a; 一共有多少个location1【包括pad的一个】最长的时间间隔&#xff08;秒&#xff09;最长的距离间隔&#xff08;千米&#xff09;多少个useer idpadding 的locationidpad_item的内容 location…

AWVS安装Runtime Error at 107:1161

invalid or missing database information from settings.ini 这个是操作系统的环境引起的问题。 可以尝试的方法&#xff1a; 1、用CCleaner卸载或者删除之前安装的AWVS 工具——找到acunetix——卸载 2、清理注册表 查看&#xff1a; 修复&#xff1a; 3、删除其他文件 安装E…

开源基金会AtomGit教程

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 注册 点击链接进入官网&#xff0c;先注册&#xff0c;然后登录&#xff1a;https://atomgit.com/ 编辑个人资料&#xff0c;修改一下自己的信息&#xff0c;用户名后面提交代码的时候要…

Canvas绘制图片和区域(前端使用Canvas绘制图片,并在图片上绘制区域)

简介&#xff1a;在Web开发中&#xff0c;有时候我们需要在图片上进行一些交互式操作&#xff0c;比如绘制区域、标记等。这种场景下&#xff0c;我们可以使用HTML5的<canvas>元素来实现。Canvas 是 HTML5 提供的一种图形绘制接口&#xff0c;可以通过 JavaScript 在网页…

Agisoft Metashape Pro for Mac/win:开启三维建模新视界

在当今数字化的时代&#xff0c;三维建模技术正发挥着越来越重要的作用。而 Agisoft Metashape Pro for Mac/win 无疑是该领域的一颗璀璨明星。 这款强大的三维建模软件为专业人士和爱好者提供了无与伦比的工具和功能。无论你是从事建筑设计、考古研究、影视特效制作还是地理信…

【Leetcode】55- 跳跃游戏

问题简述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#…

智能体Agent笔记

智能体的定义&#xff1a; 1. 可以感受环境中的动态条件 2. 能采取动作影响环境 3. 能运用推理能力理解信息&#xff0c;解决问题&#xff0c;产生推断&#xff0c;决定动作。 我个人觉得智能体是个饼&#xff0c;最核心的问题是&#xff0c;你如何解决大模型的幻觉问题&…

基于STM32的衣柜防潮系统设计的毕业论文

基于STM32的衣柜防潮系统设计的毕业论文 一、引言 随着生活品质的提升&#xff0c;人们对家居环境的舒适度要求越来越高。衣柜作为家居存储衣物的重要部分&#xff0c;其内部环境的湿度控制显得尤为重要。湿度过高可能导致衣物发霉、变质&#xff0c;严重影响衣物的使用寿命和…

[Android]常见的包管理方式

在Android开发中&#xff0c;包管理主要是通过构建和依赖管理工具来处理。下面列举了几种最常见和主流的包管理方式&#xff1a; 一、Gradle Gradle 是 Android 官方推荐的构建工具&#xff0c;几乎成为了 Android 开发的标准。它支持自定义构建逻辑、依赖管理、多项目构建等…

CMS垃圾回收器为什么被移除

CMS&#xff08;Concurrent Mark-Sweep&#xff09;垃圾回收器是Java虚拟机中一种以获取最短回收停顿时间为目标的收集器。CMS的主要特点是它允许垃圾回收线程与应用程序线程同时运行&#xff0c;尽可能减少应用程序的停顿时间。尽管它在多核处理器上表现良好&#xff0c;并且能…

笨方法自学python(三)-数学计算

数字和数学计算 这章练习里有很多的数学运算符号。我们来看一遍它们都叫什么名字 plus 加号-minus 减号/ slash 斜杠*asterisk 星号% percent 百分号< less-than 小于号greater-than 大于号< less-than-equal 小于等于号 greater-than-equal 大于等于号 print ("I …

JavaScript中,改变this的三种方法

在JavaScript中&#xff0c;this 关键字是一个特殊的变量&#xff0c;它在函数执行时确定了函数的上下文。通常&#xff0c;this 指向调用该函数的对象。但是&#xff0c;在某些情况下&#xff0c;我们可能需要改变 this 的指向。以下是三种常见的方法来改变 this 的指向&#…

优先队列全面讲解

主题&#xff1a; 优先队列是一种非常有用的数据结构&#xff0c;它让你能够管理一组数据&#xff0c;使得每次访问或移除数据时&#xff0c;总是得到当前集合中优先级最高&#xff08;或最低&#xff09;的那个元素。这个特性让优先队列非常适用于需要快速访问集合中最重要元…

20232906 2023-2024-2 《网络与系统攻防技术》第九次作业

20232906 2023-2024-2 《网络与系统攻防技术》第九次作业 1.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是&#xff1a;main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段&#xff0c;getShell&am…

暗区突围哪里获得测试资格 暗区突围测试资格获取方法

在游戏业界的浩瀚星空中&#xff0c;《暗区突围》如同一颗璀璨新星&#xff0c;以其独树一帜的游戏模式和前所未有的沉浸式体验&#xff0c;迅速吸引了全球玩家的目光。它不仅仅是一款游戏&#xff0c;更像是一次对勇气、智慧与团队合作的深度探索。玩家在危机四伏的暗区中&…

程序人生 | 人生如棋,落子无悔

人生的开始&#xff0c;始于哭声&#xff0c;浮浮沉沉几十年。终了&#xff0c;一声长叹&#xff0c;在一片哭声中撒手离去。 人生的道路虽然漫长&#xff0c;但是关键就是那么几次机会的选择&#xff0c;可以决定此后几十年的光阴。 有个故事讲&#xff1a;古代有个人去砍柴…

.kat6.l6st6r勒索病毒数据怎么处理|数据解密恢复

导言&#xff1a; 在数字时代的洪流中&#xff0c;网络安全领域的新挑战层出不穷。近期&#xff0c;.kat6.l6st6r勒索病毒的出现再次打破了传统安全防护的界限。这种新型勒索病毒不仅具有高超的加密技术&#xff0c;更以其独特的传播方式和隐蔽性&#xff0c;给全球用户带来了…