shion のアバター画像もくもくログページ一覧ブログ一覧技術メモ一覧ライセンス表記利用規約外部リンクconnpassGitHubSpeaker DeckTwitter[工事中]Shion のもくログバージョン1.2.5

もくもくログ

主にIT 関連のメモをもくもくと綴っていきます

最終更新日:2021/02/08 12:37:172021/01/30 ~ 2021/02/05 のもくもく日記活動記録

もくもく 前回までは

2021/01/23 ~ 2021/01/29 のもくもく日記 をご覧ください。

今回の目標

途中経過

その1

AndroidPreparation で開発したAndroid ライブラリは、bintray 経由でjCenter に公開してたりします。
今まではアップロードするためにxxx のGradle Plugin を使っていたのだけど、Deprecated になってしまったのですorz
なので、maven-publish を使った記述に書き直そうとしたのだけど、めっちゃハマったのでメモしてみる。

結果

root のbuild.config はこんな感じ。
プラグインの導入と、変数の定義が主目的。

buildscript {
    ext {
        bintray_access_key = project.hasProperty('bintray_key') ? bintray_key : System.getenv('bintray_key')
        bintray_access_user = project.hasProperty('bintray_user') ? bintray_user : System.getenv('bintray_user')
        bintray_github = "https://github.com/TentaShion/AndroidPreparation"
        bintray_group_id = "work.shion.androidpreparation"
        bintray_repository = "maven"

        (省略)
    }
    dependencies {
        (省略)

        // Bintray
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5'
    }
    repositories {
        google()
        jcenter()
    }
}

(省略)

で、アップロードロジックは各モジュールのbuild.gradle に記述した。

plugins {
    // Android
    id 'com.android.library'

    // Bintray
    id 'com.jfrog.bintray'

    // Maven
    id 'maven-publish'

    (省略)
}


// バージョン
def appver_major = 1
def appver_minor = 0
def appver_revision = 4
version = "${appver_major}.${appver_minor}.${appver_revision}"

// ライブラリ情報
archivesBaseName = "debugger"


android {
    (省略)
}

bintray {
    key = bintray_access_key
    pkg {
        licenses = ['MIT']
        name = "${bintray_group_id}.${archivesBaseName}"
        publicDownloadNumbers = true
        repo = bintray_repository
        vcsUrl = "${bintray_github}.git"
        version {
            name = project.version
            released  = new Date()
            vcsTag = "Debugger_${project.version}"
        }
        websiteUrl = bintray_github
    }
    publications = ['release']
    user = bintray_access_user
}

dependencies {
    (省略)
}

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release

                groupId
                artifactId archivesBaseName
                version this.version

                artifact javadocJar {
                    classifier = 'javadoc'
                    extension = 'jar'
                }
                artifact sourcesJar {
                    classifier = 'sources'
                    extension = 'jar'
                }

                pom.withXml {
                    def dependenciesNode = asNode().getAt('dependencies')[0] ?: asNode().appendNode('dependencies')

                    // Iterate over the implementation dependencies (we don't want the test ones), adding a <dependency> node for each
                    configurations.implementation.allDependencies.each {
                        // Ensure dependencies such as fileTree are not included.
                        if (it.name != 'unspecified') {
                            def dependencyNode = dependenciesNode.appendNode('dependency')
                            dependencyNode.appendNode('groupId', it.group)
                            dependencyNode.appendNode('artifactId', it.name)
                            dependencyNode.appendNode('version', it.version)
                        }
                    }
                }
            }
        }
    }
}

task javadoc(type: Javadoc) {
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    excludes = ['**/*.kt']
    source = android.sourceSets.main.java.srcDirs
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    from javadoc.destinationDir
}

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
}

この実装は下記を参考にしたのだけど、それぞれからいいとこどりする必要があった。

  • bintray/gradle-bintray-plugin
    • 見どころ
      • ざっくりとした説明とサンプルがあるところ
    • 不足しているところ
      • Android に特化した記述でないところ
  • Maven Publish プラグインを使用する | Android Developers
    • 見どころ
      • afterEvaluate 内で記述する理由が書いてあるところ
      • コンポーネント(ビルドタイプ) と一致させるように書いてあるところ
        → 上記の例だとフレーバーはなく、ビルドタイプのみなので、"release" としている
    • 不足しているところ
      • jCenter で配布するのに必要なjavadoc まわりの記述が抜けているところ

これでやっと終わったヽ(^o^)丿……と思った矢先、どうやらBintray, jCenter などはサービス終了するようだorz

Service End for Bintray, JCenter, GoCenter, and ChartCenter | JFrog

その2

Jetpack Navigation で、自動生成されるDirections を使って

ダイアログ1を出す
ダイアログ1で許可されたら処理をする
ダイアログ2を出す

をやったみたら、ダイアログ1につられてダイアログ2も消えてしまったorz

しゃーないので、ダイアログ1を明示的に消してみたら、うまく動いた

その3

(Kotlin のコレクション関数、多すぎじゃねw)

!any() って書いていたら、none() とかあってびびるw

今回の成果

関連リンク

参考文献

Active なGitHub リポジトリ

一覧に戻る