<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>JitPack on opoojkk</title><link>https://opoojkk.com/tags/jitpack/</link><description>Recent content in JitPack on opoojkk</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Fri, 06 Oct 2023 14:29:46 +0800</lastBuildDate><atom:link href="https://opoojkk.com/tags/jitpack/index.xml" rel="self" type="application/rss+xml"/><item><title>Android library模块publish到JitPack完成流程</title><link>https://opoojkk.com/posts/2023/10/06/android-gradle-library-publish-to-jitpack/</link><pubDate>Fri, 06 Oct 2023 14:29:46 +0800</pubDate><guid>https://opoojkk.com/posts/2023/10/06/android-gradle-library-publish-to-jitpack/</guid><description>&lt;h2 class="heading" id="背景">
 背景&lt;span class="heading__anchor"> &lt;a href="#%e8%83%8c%e6%99%af">#&lt;/a>&lt;/span>
&lt;/h2>&lt;p>前段时间想要找一个支持Material You主题的FloatingActionButton，几经辗转总算是找到了，但组件是在另一个开源库的基础上封装继承，一直拖到昨天才把该部分抽离出来，放到了&lt;a href="https://github.com/opoojkk/material-speed-dial">单独项目&lt;/a>中。&lt;/p>
&lt;p>由于View依赖了几个类，每个类都有各自的分工，聚合到一起会导致View类过大，且有应该它承担的职责，故没有将所有方法放到一个类文件中。
这样麻烦就到了引用时，昨天睡前决定以开源库的形式支持，于是有了这篇文章。&lt;/p>
&lt;h2 class="heading" id="前置知识">
 前置知识&lt;span class="heading__anchor"> &lt;a href="#%e5%89%8d%e7%bd%ae%e7%9f%a5%e8%af%86">#&lt;/a>&lt;/span>
&lt;/h2>&lt;h3 class="heading" id="android-module类型">
 Android module类型&lt;span class="heading__anchor"> &lt;a href="#android-module%e7%b1%bb%e5%9e%8b">#&lt;/a>&lt;/span>
&lt;/h3>&lt;p>Android中module分为两类，分别是application和library，application是可以运行起来的app，library则是某一部分独立的功能。library又可以细分为Java library和Android library，两者的区别在于Java library比Android library少了资源文件（项目res文件夹下），构建出来的是jar；Android library构建出来的是aar。&lt;/p>
&lt;h3 class="heading" id="jitpack构建流程">
 JitPack构建流程&lt;span class="heading__anchor"> &lt;a href="#jitpack%e6%9e%84%e5%bb%ba%e6%b5%81%e7%a8%8b">#&lt;/a>&lt;/span>
&lt;/h3>&lt;p>先check out出你的代码，执行Gradle task：&lt;code>publishToMavenLocal&lt;/code>，再把生成的aar文件上传以&lt;code>com.github.用户名.仓库名称:tag&lt;/code>的格式。这些都由JitPack帮我们完成。&lt;/p>
&lt;h2 class="heading" id="行动">
 行动&lt;span class="heading__anchor"> &lt;a href="#%e8%a1%8c%e5%8a%a8">#&lt;/a>&lt;/span>
&lt;/h2>&lt;p>决定了publish到开源仓库，接下来要决定到哪个仓库。常用的几个分别有：&lt;/p>
&lt;ul>
&lt;li>Google&lt;/li>
&lt;li>MavenCenter&lt;/li>
&lt;li>JetCenter(停止支持)&lt;/li>
&lt;li>JitPack&lt;/li>
&lt;/ul>
&lt;p>JetCenter从去年开始宣布停止维护，首先排除。
Google没有找到url等相关信息，加上平时用到Google仓库的都是官方提供的依赖，猜测不开放给publish。
剩下的两个MavenCenter和JitPack。JitPack依赖git，Github仓库的中打tag就可以创建，最易操作，但以来的group和artifact是不能修改的。MavenCenter搜索到的步骤很复杂，日后再说。&lt;/p>
&lt;p>于是最后决定用JitPack。&lt;/p>
&lt;h3 class="heading" id="项目配置">
 项目配置&lt;span class="heading__anchor"> &lt;a href="#%e9%a1%b9%e7%9b%ae%e9%85%8d%e7%bd%ae">#&lt;/a>&lt;/span>
&lt;/h3>&lt;p>Android中module分为两类，分别是application和library，application是可以运行起来的app，library则是某一部分独立的功能。library又可以细分为Java library和Android library，两者的区别在于Java library比Android library少了资源文件（项目res文件夹下），构建出来的是jar文件；Android library构建出来的是aar文件。&lt;/p>
&lt;h4 class="heading" id="添加gradle-plugin并配置依赖库">
 添加Gradle Plugin并配置依赖库&lt;span class="heading__anchor"> &lt;a href="#%e6%b7%bb%e5%8a%a0gradle-plugin%e5%b9%b6%e9%85%8d%e7%bd%ae%e4%be%9d%e8%b5%96%e5%ba%93">#&lt;/a>&lt;/span>
&lt;/h4>&lt;p>创建一个依赖库需要用到library module。创建一个module，Templates选&lt;code>Android Library&lt;/code>，输入名称，创建。
然后就是等待构建，构建完成后在刚刚module的build.gradle（Kotlin版本对应为buil.gradle.kts）增加Gradle Plugin：&lt;code>maven-publish&lt;/code>。&lt;/p>
&lt;blockquote>
&lt;p>最好是添加依赖后先同步，等同步完成再添加publishing代码块，否则publishing代码块会报红。&lt;/p>
&lt;/blockquote>
&lt;p>在build.gradle文件的最外层与（与plugins、android、dependencies等通层级）添加：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="cl">&lt;span class="n">publishing&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">publications&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">create&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">MavenPublication&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;maven&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">groupId&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;io.github.opoojkk&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">artifactId&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;material-speed-dial&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">version&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;1.0.0&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">afterEvaluate&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">artifact&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">tasks&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">getByName&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;bundleReleaseAar&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;code>groupId&lt;/code>和&lt;code>artifactId&lt;/code>都修改成自己的（尝试后发现JitPack中修改了也还是固定的com.github.用户名.仓库名:tag的形式😅）。&lt;/p>
&lt;p>另外，JitPack官方文档中用的是 &lt;code>from(components[&amp;quot;java&amp;quot;])&lt;/code>，这样会提示&lt;code>SoftwareComponentInternal with name 'java' not found.&lt;/code>。原因暂时不详，参考链接：&lt;a href="https://stackoverflow.com/questions/62982138/softwarecomponentinternal-with-name-java-not-found">SoftwareComponentInternal with name &amp;lsquo;java&amp;rsquo; not found&lt;/a>&lt;/p>
&lt;h4 class="heading" id="匹配gradle和target-java">
 匹配Gradle和Target Java&lt;span class="heading__anchor"> &lt;a href="#%e5%8c%b9%e9%85%8dgradle%e5%92%8ctarget-java">#&lt;/a>&lt;/span>
&lt;/h4>&lt;p>踩过的坑：
项目Gradle版本8.0，Java设置1.8，疯狂提示：
No matching variant of com.android.tools.build:gradle:8.1.1 was found.
改成Java 11后提示要用18，再改成18搞定。&lt;/p>
&lt;p>&lt;strong>&lt;code>sourceCompatibility&lt;/code>、&lt;code>targetCompatibility&lt;/code>和&lt;code>jvmTarget&lt;/code>后的值都需要统一修改。&lt;/strong>&lt;/p>
&lt;h3 class="heading" id="让依赖库可以被依赖">
 让依赖库可以被依赖&lt;span class="heading__anchor"> &lt;a href="#%e8%ae%a9%e4%be%9d%e8%b5%96%e5%ba%93%e5%8f%af%e4%bb%a5%e8%a2%ab%e4%be%9d%e8%b5%96">#&lt;/a>&lt;/span>
&lt;/h3>&lt;p>开始时说过是依赖Github仓库，因此这一步需要将仓库推送到Github，步骤略去。
推送后在仓库中点击&lt;code>Release&lt;/code>
&lt;img src="https://i.imgur.com/qCsGI9e.jpg">
&lt;code>Draft a new release&lt;/code>
&lt;img src="https://i.imgur.com/cCpAbGJ.jpg">
选择Choose a tag，输入一个tag，这里是tag会对应到依赖库的版本，可以输入&lt;code>1.0.0&lt;/code>这样的格式，其他当然也可以。要点击&lt;code>Create new tag: xxx on publish&lt;/code>，Release title也填入&lt;code>1.0.0&lt;/code>。
这样完成了Github部分的步骤。&lt;/p>
&lt;p>接下来打开&lt;a href="https://jitpack.io/">JitPack首页&lt;/a>，把刚刚的Github仓库地址复制下来，粘贴到搜索框点击&lt;code>Look up&lt;/code>，就可以看到这样的ui：
&lt;img src="https://i.imgur.com/pZUYaWe.jpg">&lt;/p>
&lt;p>想要得到依赖库，需要点击&lt;code>Get it&lt;/code>。&lt;/p>
&lt;p>刚刚的部分会显示这样的状态，标识正在构建：
&lt;img src="https://i.imgur.com/oWOmE8n.jpg">&lt;/p>
&lt;p>完成后前面多出一个绿色的icon，表示已经成功：
&lt;img src="https://i.imgur.com/A7sDOmr.jpg">
点击可以见到log，在log的最后能够看到依赖库的地址。&lt;/p>
&lt;p>当红色的icon时表示出了问题，可以点击红色的icon查看问题的原因。
再然后就是导入了，可以参考&lt;a href="https://docs.jitpack.io/android/#gradle">官网文档&lt;/a>。&lt;/p>
&lt;h2 class="heading" id="总结">
 总结：&lt;span class="heading__anchor"> &lt;a href="#%e6%80%bb%e7%bb%93">#&lt;/a>&lt;/span>
&lt;/h2>&lt;p>总结一下步骤：&lt;/p>
&lt;ol>
&lt;li>Android项目中创建module，添加插件并配置；&lt;/li>
&lt;li>上传到Github仓库；&lt;/li>
&lt;li>Github仓库打tag；&lt;/li>
&lt;li>到JitPack找到仓库，点击Get it得到依赖库。&lt;/li>
&lt;/ol>
&lt;h2 class="heading" id="参考链接">
 参考链接&lt;span class="heading__anchor"> &lt;a href="#%e5%8f%82%e8%80%83%e9%93%be%e6%8e%a5">#&lt;/a>&lt;/span>
&lt;/h2>&lt;ol>
&lt;li>&lt;a href="https://stackoverflow.com/questions/62982138/softwarecomponentinternal-with-name-java-not-found">SoftwareComponentInternal with name &amp;lsquo;java&amp;rsquo; not found&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.jitpack.io/android/#gradle">JitPack文档&lt;/a>&lt;/li>
&lt;/ol></description></item></channel></rss>