はじめに
Android Studioをつかって実行可能なjarをつくる方法を説明します。
Version
OSのバージョンは次の通りです。
Microsoft Windows 10 Home
10.0.18363 N/A ビルド 18363
Android Studioのバージョンは次の通りです。
Android Studio 4.0
Build #AI-193.6911.18.40.6514223, built on May 21, 2020
Runtime version: 1.8.0_242-release-1644-b01 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
javaのバージョンは次の通りです。
java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
プロジェクトをつくる
次の手順でプロジェクトをつくります。
Android Studioを起動します。
Start a new Android Studio projectを選択します。
No Activityのプロジェクトを作成します。
Nameを"My Application"(default)とします。Languageを"Kotlin"とします。
jarのモジュールをつくる
次の手順でプロジェクト内にjarのモジュールを追加します。
File - New - New Module ... を選択します。
Java or Kotlin Libraryを選択します。
Library nameを"lib"(default)とします。Class nameを"MyClass"とします。
fun main
MyClass.kt を開きます。内容を次の処理に置き換えます。
package com.example.lib
fun main(args: Array<String>) {}
ここまで実行した状態の画面は次の通りです。
build.gradle
libのbuild.gradleに次を追加します。
jar {
manifest {
attributes("Main-Class": "com.example.lib.MyClassKt")
}
from { configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
}
jar taskを追加する
次の手順でjar taskを追加します。
View - Tool Windows - Gradle を選択します。Windowが表示されます。
My Application - Tasks - build - jar をダブルクリックします。ビルド開始します。
ここまで実行した状態の画面は次の通りです。
次のパスにjarができます。
MyApplication\lib\build\libs\lib.jar
実行
command prompt を開きます。lib.jarがあるパスに移動します。
次のコマンドを実行します。
エラーなく実行できれば期待通り実行可能なjarができていることがわかります。
java -jar .\lib.jar
Troubleshooting
"Entry META-INF/XXXX"のエラーが発生する
次のようなエラーが発生する場合の対策を記載します。
Entry META-INF/versions/9/module-info.class is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.2/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.
エラーが発生した環境
Android Studioのバージョンは次の通りです。
Android Studio Bumblebee | 2021.1.1 Patch 2
Build #AI-211.7628.21.2111.8193401, built on February 17, 2022
Runtime version: 11.0.11+9-b60-7590822 amd64
VM: OpenJDK 64-Bit Server VM by Oracle Corporation
Windows 10 10.0
対策
build.gradleに
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
を追加します。
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes("Main-Class": "com.example.lib.MyClassKt")
}
from { configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
}