当前位置: 首页 > news >正文

[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 坐标。

相关文章:

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

1.创建Kotlin测试项目 在Android Studio或其他IDE中选择“Create New Project”。选择Kotlin和Gradle作为项目类型和构建系统。指定项目名称和位置&#xff0c;完成设置。 2.创建Android Library模块 官方文档&#xff1a;创建 Android 库 | Android Studio | Android De…...

鸿蒙应用开发者高级认证指南及参考资料整理(含详细参考答案)

如何报名鸿蒙应用开发者高级认证 报名链接:点击这里进行报名。报名步骤: 点击上述链接进入报名页面。选择“立即报名”。在课程内容中找到“HarmonyOS应用开发者高级认证”,点击进入。点击“参加考试”,随后即可开始考试。考试注意事项 实名认证:考试前,请务必完成实名认…...

数据匿名化技术

不同的数据匿名化技术可用于多种行业&#xff0c;旨在从数据流中获取有用的见解&#xff0c;同时确保满足数据保护标准和法规的合规要求。 数据脱敏&#xff08;Data Masking&#xff09; 数据脱敏&#xff0c;又称数据漂白、数据去隐私化或数据变形&#xff0c;指的是对数据集…...

HTML学习笔记汇总

整理一些常见问题的Links&#xff0c;不定期更新。 Html生成自定义函数的图形&#xff08;2024/5/10&#xff09;-CSDN博客 HTML中插入图片&#xff08;2024/5/10&#xff09;-CSDN博客 Html给网页加icon图标_html icon-CSDN博客...

初始JSVMP

1.初始JSVMP JSVMP是"JavaScript Virtual Machine Protection"的缩写&#xff0c;是一种前端代码虚拟化保护技术。它的核心思想是在JavaScript代码保护过程中引入代码虚拟化&#xff0c;将目标代码转换成自定义的字节码&#xff0c;这些字节码只有特殊的解释器才能识…...

【机器学习数据可视化-04】Pyecharts数据可视化宝典

一、引言 在大数据和信息爆炸的时代&#xff0c;数据可视化成为了信息传递和展示的关键手段。通过直观的图表和图形&#xff0c;我们能够更好地理解数据&#xff0c;挖掘其背后的信息。Pyecharts&#xff0c;作为一款基于Python的数据可视化库&#xff0c;凭借其丰富的图表类型…...

通过 Java 操作 redis -- zset 有序集合基本命令

目录 使用命令 zadd&#xff0c;zrange 使用命令 zcard 使用命令 zrem 使用命令 zscore 使用命令 zrank 关于 redis zset 有序集合类型的相关命令推荐看Redis - Zset 有序集合 要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务器&#xff0c;推荐看通过 Jav…...

力扣 516. 最长回文子序列 python AC

动态规划 class Solution:def longestPalindromeSubseq(self, s):size len(s)dp [[0] * size for _ in range(size)]for i in range(size):dp[i][i] 1for i in range(size - 1, -1, -1):for j in range(i 1, size):if s[i] s[j]:dp[i][j] dp[i 1][j - 1] 2else:dp[i][…...

数据库编程

PL/SQL程序 1.PL/SOL程序块 整个PL/SQL块分三部分&#xff1a;声明部分、执行部分、异常处理部分&#xff1b; 示例&#xff1a; declare --变量声明 v_sno varchar2(10) : ‘04001’; v_cno varchar2(10) :‘001’; v_grade number : 90; begin --程序入口 insert…...

(docker)进入容器后如何使用本机gpu

首次创建容器&#xff0c;不能直接使用本机gpu 在系统终端进行如下配置&#xff1a; 1.安装NVIDIA Container Toolkit 进入Nvidia官网Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.15.0 documentation&#xff0c;安装NVIDIA Container Toolkit …...

java基础知识点总结2024版(8万字超详细整理)

java基础知识点总结2024版&#xff08;超详细整理&#xff09; 这里写目录标题 java基础知识点总结2024版&#xff08;超详细整理&#xff09;java语言的特点1.简单性2.面向对象3.分布式4.健壮性5.安全性6.体系结构中立7.可移植性8.解释性9.多线程10.动态性 初识java中的main方…...

vue中使用element的i18n语言转换(保姆式教程-保证能用)

话不多说&#xff0c;先看效果:预览地址: https://sandm00.github.io/i18n-switch/#/ 1、项目中需要使用的插件&#xff0c;vue2或vue3、element、vue-i18n、js-cookie、vuex我是在vue2中使用 npm i element-ui -S npm i js-cookie -S npm i vue-i18n8.28.2 //因为我项目使用…...

01 设计模式--单例模式

1. 单例模式 单例模式有两种实现方式&#xff1a; 1.1 饿汉模式&#xff08;Eager Initialization&#xff09;&#xff1a;在类加载时就创建单例实例&#xff0c;无论是否需要使用该实例。 饿汉模式在类加载时就创建单例实例&#xff0c;无论是否需要使用该实例。 饿汉模式…...

css backdrop-filter 实现背景滤镜

官方给出的定义是&#xff1a;backdrop-filter属性允许您将图形效果&#xff08;如模糊或颜色偏移&#xff09;应用于元素后面的区域。因为它适用于元素后面的所有内容&#xff0c;所以要查看元素或其背景的效果&#xff0c;需要透明或部分透明。 大致分为以下10种&#xff1a…...

AR人脸道具SDK解决方案,实现道具与人脸的自然融合

AR人脸道具SDK解决方案&#xff0c;实现道具与人脸的自然融合美摄科技以其卓越的技术实力和创新能力&#xff0c;为企业带来了全新的AR人脸道具SDK解决方案。这一解决方案将为企业打开全新的市场机会&#xff0c;为用户带来前所未有的互动体验。 颠覆传统&#xff0c;开启AR人…...

Windows安装RabbitMQ教程(附安装包)

需要两个安装包 Erlang 安装包: https://download.csdn.net/download/Brevity6/89274663 (自己从官网下载也可以) RabbitMQ Windows 安装包&#xff1a; https://download.csdn.net/download/Brevity6/89274667 (自己从官网下载也可以) Erlang安装 Erlang安装傻瓜式下一…...

这个问题无人能解,菜鸟勿进

前言 这是陈旧已久的草稿2021-06-23 23:25:12 现在2024-5-12 21:53:46&#xff0c;发布到[逻辑题]专栏中。 一、问题 1.描述&#xff1a; 在我的世界中建个红石电路 2.需求&#xff1a; 五个灯A、B、C、D、E、F 五个开关a、b、c、d、e、f、总开关 3.要求&#xff1a; 总开关…...

揭秘高效引流获客的艺术:转化技巧大公开

在数字化营销的海洋中&#xff0c;每个企业都如同一艘努力航行的船&#xff0c;而流量便是推动船只前行的风帆。如何有效吸引并获取潜在客户&#xff0c;即所谓的“引流获客”&#xff0c;已成为企业市场营销策略中不可或缺的一环。本文将详细探讨几种实用且高效的引流获客技巧…...

【Unity 鼠标输入检测】

Unity 鼠标输入检测 Unity提供了多种方法来检测和处理鼠标输入&#xff0c;允许开发者在游戏中实现对鼠标移动、点击和滚轮滚动的响应。以下是一些基本的鼠标输入检测方法&#xff1a; 1. Input.mousePosition 这个属性返回当前鼠标指针的屏幕坐标。坐标是以像素为单位的&…...

LeetCode hot100-33-Y

148. 排序链表 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 这题能通过但是投机取巧了&#xff0c;一般应该不能这样做&#xff0c;直接把节点里的值拿出来&#xff0c;排序后再更新每个节点的值。 /*** Definition for singly-linked list.* p…...

C++和Python通信引文道路社评电商大规模行为图结构数据模型

&#x1f3af;要点 &#x1f3af;图论数学逻辑和计算&#xff1a;&#x1f58a;定向网络节点和边 | &#x1f58a;节点的入度 | &#x1f58a;出度和度 | &#x1f58a;源节点 | &#x1f58a;汇节点 | &#x1f58a; 孤立节点 | &#x1f58a;入度分布和出度分布 | &#x1f…...

单片机-点亮第一盏灯

原理图 需求&#xff1a;点亮或是熄灭LED 通过控制 P5.3引脚输出高电平时&#xff0c;LED灯就点亮&#xff0c;输出低电平时LED灯就熄灭 1.项目创建 新建项目 配置开发板信息 当前位STC芯片的开发板&#xff0c;选择STC MCU Database 搜素具体芯片型号&#xff0c;进行配置…...

C++组合类

类的数据成员不但可以是基本类型&#xff0c;也可以是其它类的对象。 组合类就是指一个类包含其他类的对象作为该类的数据成员。 当组合类创建对象时&#xff0c;其中包含的各个数据成员对象应首先被创建。因此&#xff0c;在创建类的对象时&#xff0c;既要对本类的基本…...

Linux学习笔记3

建立最小linux系统【续】 书接上文&#xff0c;上一篇我们分析了rcS和ifconfig-eth0文件&#xff0c;接下来我们继续讲下去 passwd文件 之后在init.d的上一级目录etc下建立passwd文件&#xff0c;内容如下 root::0:0:root:/:/bin/sh bin:*:1:1:bin:/bin:daemon:*:2:2:daemo…...

免费证件照一键换底色

最近星期天在家搞了一个小工具&#xff0c;在这里分享下! 废话不多说看看效果&#xff1a; 效果还不错&#xff0c;需要的可以联系我!!!!!!!!! 别的网上可都是一次五块钱这种。太贵了。。&#xff01;&#xff01;...

使用 FFmpeg 从音视频中提取音频

有时候我们需要从视频文件中提取音频&#xff0c;并保存为一个单独的音频文件&#xff0c;我们可以借助 FFmpeg 来完成这个工作。 一、提取音频&#xff0c;保存为 mp3 文件: 要使用 FFmpeg 从音视频文件中提取音频&#xff0c;并将 ACC 编码的音频转换为 MP3 格式&#xff0…...

GraphQL在现代Web应用中的应用与优势

GraphQL是一种现代的API查询语言&#xff0c;它在现代Web应用中得到了广泛的应用&#xff0c;因为它提供了一种高效、灵活且强大的方式来获取数据 GraphQL基础快速应用示例&#xff1a; 1. 后端设置&#xff08;使用graphql-yoga&#xff09; 首先&#xff0c;我们需要创建一…...

socket编程 学习笔记 理解

在使用socket&#xff08;也就是套接字&#xff09;编程的时候&#xff0c;其实是工作于应用层和传输层之间 如果使用的是基于TCP的socket&#xff0c;那每个数据包的发送的过程大致为&#xff1a; 数据通过socket套接字构造符合TCP协议的数据包在屏蔽底层协议的情况下&#…...

SC-Lego-LOAM建图与ndt_localization的实车实现

参考&#xff1a;https://blog.csdn.net/weixin_44303829/article/details/121524380 https://github.com/AbangLZU/SC-LeGO-LOAM.git https://github.com/AbangLZU/ndt_localizer.git 将建图和定位分别使用lego-loam和ndt来进行&#xff0c;实车上的效果非常不错&#xff0c;…...

vs code中如何使用git

由于本地代码有了一些储备&#xff0c;所以想通过网址托管形式&#xff0c;之前一直使用了github&#xff0c;但是鉴于一直被墙&#xff0c;无法登录账号&#xff0c;所以选择了国内的gitee来作为托管网站。 gitee的网址&#xff1a;Gitee - 基于 Git 的代码托管和研发协作平台…...