[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'
}
替换 group
、artifact
和 version
为您的库的实际 Maven 坐标。
相关文章:

[Kotlin]创建一个私有包并使用
1.创建Kotlin测试项目 在Android Studio或其他IDE中选择“Create New Project”。选择Kotlin和Gradle作为项目类型和构建系统。指定项目名称和位置,完成设置。 2.创建Android Library模块 官方文档:创建 Android 库 | Android Studio | Android De…...
鸿蒙应用开发者高级认证指南及参考资料整理(含详细参考答案)
如何报名鸿蒙应用开发者高级认证 报名链接:点击这里进行报名。报名步骤: 点击上述链接进入报名页面。选择“立即报名”。在课程内容中找到“HarmonyOS应用开发者高级认证”,点击进入。点击“参加考试”,随后即可开始考试。考试注意事项 实名认证:考试前,请务必完成实名认…...
数据匿名化技术
不同的数据匿名化技术可用于多种行业,旨在从数据流中获取有用的见解,同时确保满足数据保护标准和法规的合规要求。 数据脱敏(Data Masking) 数据脱敏,又称数据漂白、数据去隐私化或数据变形,指的是对数据集…...
HTML学习笔记汇总
整理一些常见问题的Links,不定期更新。 Html生成自定义函数的图形(2024/5/10)-CSDN博客 HTML中插入图片(2024/5/10)-CSDN博客 Html给网页加icon图标_html icon-CSDN博客...
初始JSVMP
1.初始JSVMP JSVMP是"JavaScript Virtual Machine Protection"的缩写,是一种前端代码虚拟化保护技术。它的核心思想是在JavaScript代码保护过程中引入代码虚拟化,将目标代码转换成自定义的字节码,这些字节码只有特殊的解释器才能识…...

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

通过 Java 操作 redis -- zset 有序集合基本命令
目录 使用命令 zadd,zrange 使用命令 zcard 使用命令 zrem 使用命令 zscore 使用命令 zrank 关于 redis zset 有序集合类型的相关命令推荐看Redis - Zset 有序集合 要想通过 Java 操作 redis,首先要连接上 redis 服务器,推荐看通过 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块分三部分:声明部分、执行部分、异常处理部分; 示例: declare --变量声明 v_sno varchar2(10) : ‘04001’; v_cno varchar2(10) :‘001’; v_grade number : 90; begin --程序入口 insert…...

(docker)进入容器后如何使用本机gpu
首次创建容器,不能直接使用本机gpu 在系统终端进行如下配置: 1.安装NVIDIA Container Toolkit 进入Nvidia官网Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.15.0 documentation,安装NVIDIA Container Toolkit …...

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

vue中使用element的i18n语言转换(保姆式教程-保证能用)
话不多说,先看效果:预览地址: https://sandm00.github.io/i18n-switch/#/ 1、项目中需要使用的插件,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. 单例模式 单例模式有两种实现方式: 1.1 饿汉模式(Eager Initialization):在类加载时就创建单例实例,无论是否需要使用该实例。 饿汉模式在类加载时就创建单例实例,无论是否需要使用该实例。 饿汉模式…...

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

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

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

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

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

【Unity 鼠标输入检测】
Unity 鼠标输入检测 Unity提供了多种方法来检测和处理鼠标输入,允许开发者在游戏中实现对鼠标移动、点击和滚轮滚动的响应。以下是一些基本的鼠标输入检测方法: 1. Input.mousePosition 这个属性返回当前鼠标指针的屏幕坐标。坐标是以像素为单位的&…...
LeetCode hot100-33-Y
148. 排序链表 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 这题能通过但是投机取巧了,一般应该不能这样做,直接把节点里的值拿出来,排序后再更新每个节点的值。 /*** Definition for singly-linked list.* p…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

开疆智能Ethernet/IP转Modbus网关连接鸣志步进电机驱动器配置案例
在工业自动化控制系统中,常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例中,客户现场采用了 罗克韦尔PLC,但需要控制的变频器仅支持 ModbusRTU 协议。为了实现PLC 对变频器的有效控制与监控,引入了开疆智能Etherne…...
项目研究:使用 LangGraph 构建智能客服代理
概述 本教程展示了如何使用 LangGraph 构建一个智能客服代理。LangGraph 是一个强大的工具,可用于构建复杂的语言模型工作流。该代理可以自动分类用户问题、分析情绪,并根据需要生成回应或升级处理。 背景动机 在当今节奏飞快的商业环境中,…...