LoginSignup
4
1

More than 1 year has passed since last update.

GitHub Actions で .kts ファイルを実行して APK の差分を抽出してみた

Posted at

この記事は ゆめみ Advent Calendar 2021 の 5 日目の記事です。

はじめに

みなさんは、Kotlin のスクリプト言語としての機能を使ったことはありますか?

Android アプリの開発で .kts という拡張子のファイルを Gradle で使っているよ!という方は、ちょっぴりいるのかなと思います。

以前は、サポート機能がまだまだ少なく、IDEA のコード補完も効かないなどありましたが、最近、どんどん強化・改善がされ、少しずつ使いやすくなってきました。

GitHub Actions に Kotlin がプリインストールされていて、せっかくなので APK の差分を抽出してみました :muscle:

成果物

※ GitHub Marketplace へも近日リリース予定です :v:

実際の動作

image.png

スクリプト言語としての機能について

さよなら Gradle

Gradle ファイルは必要ありません

ライブラリを使いたいときは?

// ライブラリをインストールしてくるリポジトリを記載
@file:Repository("https://repo1.maven.org/maven2/")

// 使用するライブラリを記載
@file:DependsOn("eu.jrie.jetbrains:kotlin-shell-core:0.2.1")

// ライブラリで使用するものを記載
import eu.jrie.jetbrains.kotlinshell.shell.*

ファイルの数が増えなくて快適です :relaxed:

シェルコマンドを実行したい場合はどうするの?

公式でのドキュメントは見つかりませんでしたが、以下のライブラリを使って解決しました :sunglasses:

書き方はいろいろありますが、こんな感じで書けます :sunny:

shell {
    "echo hello"()
}
shell {
    val echo = systemProcess {
        cmd { "echo" withArg "hello" }
    }
    echo()
}
shell {
    val echo = "echo hello".process()
    echo()
}

ライブラリの作成者に感謝 :pray:

APK の差分の抽出

Android SDK のコマンドラインツールに含まれている apkanalyzer を利用します :tools:

GitHub Actions には Android SDK のコマンドラインツールもプリインストールされているため、自分でインストールする必要がないのはいいですね :sparkles:

Kotlin の恩恵

apkanalyzer の結果をゴニョゴニョしたい時にとても恩恵を感じました。

以下のコードは「タブ文字を "|" に変換して、 差分が~Bと表示されているものは除外する」という処理です。
これをシェルスクリプトでやろうとするとけっこう大変ですよね :cry:
(日常的にシェルスクリプトを触っている方であればそうでもないのでしょうか。。)

val compare =
    result("apkanalyzer -h apk compare --different-only $baseApkPath $targetApkPath")
        .replace("\t", "|")
        .split("\n")
        .filter { !it.contains("""\dB.+$""".toRegex()) }
        .joinToString("\n")

おわりに

Kotlin のスクリプト言語機能を活用して、とても快適に GitHub Actions を開発することができました。
今後もどんどん活用していこうと思います :qiitan: :lgtm:

ぜひ、みなさんも Kotlin のスクリプト言語機能をご活用ください!

参考

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1