Android Studio自定义SDK(含工具类)发布aar到私有库

自定义SDK通常方便新建项目时直接导入一些工具类以及其它东西,方便更快捷开发,这里把几个工具类集合到一起做个简单的SDK。
源码:https://github.com/overclockingi3/CustomizeSDK

环境:

Android Studio 2.3.3 + JDK 1.8

首先创建项目:

项目名什么的随便就好,创建项目之后创建新安卓库如图:

创建安卓库

创建完之后会发现库的文件结构和项目文件结构是一样的(- - 有点废话)


文件结构

接着在自定义的库里编写SDK内容(各种开源框架、工具类什么的)。代码懒得弄了,这里随便铺一个方法的图。


自定义SDK内容

配置依赖

接着用app来测试SDK,需要在app中配置依赖util,在app的build.gradle里加入依赖语句即可。

compile project(':util')

然后找个Activity测试一下

调用
试用

输出aar文件,一个简易的SDK制作完成

输出aar文件

在Gradle中双击assemble生成正式包aar文件


输出正式包aar文件

最后再补充一下,在另一个项目中引用需要在gradle加上

repositories {
    flatDir {
        dirs 'libs'
    }
}

然后在依赖里加入compile(name: 'util-release', ext: 'aar')即可

发布到私有库

在SDK的module中的build.gradle添加配置

Gradle7以上:

apply plugin: 'maven-publish'
task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
//    classifier "sources"
    archiveClassifier.set('sources')
}
project.afterEvaluate {
    publishing {
        repositories {
            //定义一个 maven 仓库
            maven {
                // 多个仓库时必须指定 name
                // name = "test"
                //允许使用非https加密地址仓库地址
                allowInsecureProtocol = true
                url = "http://172.16.1.1:8081/repository/maven-releases/"
                credentials {
                    username = "admin"
                    password = "admin123"
                }
            }
        }
        publications {PublicationContainer publication->
            // 任务名称(名称可以随便定义):releaseMaven
            releaseMaven(MavenPublication) {// 容器可配置的信息 MavenPublication
                // 上传source,这样使用放可以看到方法注释
                artifact generateSourcesJar
                // 方式一:生成aar包
                afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) }
                // 方式二:指定生成的aar路径
                // artifact "$buildDir/outputs/aar/${project.name}-release.aar"
                groupId = 'com.overc_i3'
                artifactId = 'customizesdk'
                version = '1.0.0'
                // pom文件中声明依赖,从而传递到使用方
                pom.withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')
                    configurations.implementation.allDependencies.each {
                        // 避免出现空节点或 artifactId=unspecified 的节点
                        if (it.group != null && (it.name != null && "unspecified" != it.name) && it.version != null) {
                            println it.toString()
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', it.group)
                            dependencyNode.appendNode('artifactId', it.name)
                            dependencyNode.appendNode('version', it.version)
                            dependencyNode.appendNode('scope', 'implementation')
                        }
                    }
                }
            }
        }
    }
}

需要注意的是使用maven插件时,生成的.pom文件中包括所有的依赖,从而保证使用方能够获取所有依赖。但是maven-publish插件生成的.pom文件并不包含依赖,所以我们通过pom.withXml增加了依赖。

刷新后可以在Android Studio的Gradle工具栏中看到如下配置,直接执行publish即可打包发布


Gradle工具栏
  • publish:依赖于所有publishReleaseMavenPublicationToMavenRepository任务。将所有已定义的发布发布到所有已定义存储库的聚合任务。它不包括将发布复制到本地Maven缓存。
  • publishToMavenLocal:依赖于所有publishReleaseMavenPublicationToMavenLocal任务。将所有已定义的发布复制到本地Maven缓存,包括它们的元数据(POM文件等)。
  • publishReleaseMavenPublicationToMavenLocal:将ReleaseMaven发布复制到本地Maven缓存—通常是连同发布的POM文件和其他元数据一起。
  • publishReleaseMavenPublicationToMavenRepository:将名为ReleaseMaven的仓库设发布到名为Maven的存储库中。如果您有一个没有显式名称的存储库定义,那么Maven将是Maven。
  • generatePomFileForReleaseMavenPublication:为名为ReleaseMaven的发布创建一个POM文件,填充已知元数据,如项目名称、项目版本和依赖项。生成的POM文件默认放在 build/publications/$releaseMaven/pom-default.xml
可能遇到问题:
  • 若在Android Studio的Gradle工具栏中看不到对应任务,则检查设置是否未开启配置同步,以2022.3.1版本AS为例,确认勾选Configure all Gradle tasks during Gradle Sync
    Android Studio 2022.3.1
  • 发布SDK上传的时候可能会遇到如下错误
Cannot upload checksum for module-maven-metadata.xml because the remote repository doesn't support SHA-256. This will not fail the build.
Cannot upload checksum for module-maven-metadata.xml because the remote repository doesn't support SHA-512. This will not fail the build.

解决办法也简单,在gradle.properties中添加一行配置即可。

systemProp.org.gradle.internal.publish.checksums.insecure=true

Gradle7以下:

apply plugin: 'maven'
uploadArchives {
    repositories {
        mavenDeployer {
            pom.groupId = "com.overc_i3"
            pom.artifactId = "customizesdk"
            //对应版本号
            pom.version = "1.0.0"
            //仓库地址
            repository(url: "http://172.16.1.1:8081/repository/maven-releases/") {
                //仓库用户名和密码认证
                authentication(userName: "admin", password: "admin123")
            }
        }
    }
}

执行gradle中的uploadArchives任务即可

源码:https://github.com/overclockingi3/CustomizeSDK

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,368评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,717评论 6 342
  • 想说的太多,却不知从哪说起…… 去年的今天正走在牡丹江的大街上,早已白雪皑皑,漫天飞雪。 以为回来之后会怎样,其实...
    消失的士兵阅读 231评论 0 0
  • (一) 女儿从小学到高一,一直是班长,也做过大队长、学生会主席。到了高二,班干部再也不想做了,因为那影响了学习,也...
    江苏刘志祥阅读 177评论 0 0