Kotlin
独学書
Text | Date | Status |
---|---|---|
Spring解体新書(バッチ編) | 2022/08/08 | finished ->コード |
Kotlinプログラミング | 2019/11/13 | finished ->コード |
はじめてのAndroidプログラミング | 2019/10/12 | finished ->コード |
環境
Machine | Env/FW | Last Updated |
---|---|---|
Windows Insider | IntelliJ IDEA 2025.2 EAP 7 | 2025/06/28 |
- Kotlin 2.2.0 | 2025/06/28 | |
- PostgreSQL JDBC Driver 42.7.5 | 2025/03/08 | |
Amazon Coretto 22.0.2 | 2024/11/16 | |
Android Studio Narwhal 2025.1.2 Canary 7 | 2025/06/28 | |
- Kotlin 2.2.0 | 2025/06/28 | |
- Android SDK Command-line Tools v.19 | 2025/03/14 | |
- Android Emulator v.36.1.5 | 2025/06/21 |
ノウハウ
IntelliJ IDEA
- Latest Version
- IntelliJ IDEA 2025.2 EAP (Ultimate Edition)
Build #IU-252.23591.19, built on June 25, 2025 Source revision: 431dec445ebd2 ライセンス対象: IntelliJ IDEA EAP user: Shinya Watanabe 有効期限: July 25, 2025 Runtime version: 21.0.7+6-b1038.54 amd64 (JCEF 122.1.9) VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Toolkit: sun.awt.windows.WToolkit Windows 11.0 GC: G1 Young Generation, G1 Concurrent GC, G1 Old Generation Memory: 2048M Cores: 8 Registry: ide.experimental.ui=true Non-Bundled Plugins: JavaScriptDebugger (252.23591.19) com.intellij.java (252.23591.19) org.jetbrains.completion.full.line (252.23591.19) com.intellij.notebooks.core (252.23591.30) intellij.webp (252.23591.30) idea.plugin.protoeditor (252.23591.19) Subversion (252.23591.30) com.intellij.copyright (252.23591.19) org.editorconfig.editorconfigjetbrains (252.23591.19) org.jetbrains.plugins.yaml (252.23591.19) org.toml.lang (252.23591.30) com.intellij.kubernetes (252.23591.32) com.intellij.jsonpath (252.23591.19) com.intellij.cron (252.23591.30) com.intellij.properties (252.23591.30) com.intellij.velocity (252.23591.30) com.intellij.liquibase (252.23591.19) com.intellij.freemarker (252.23591.19) com.intellij.cdi (252.23591.19) com.intellij.javaee (252.23591.19) com.intellij.javaee.extensions (252.23591.19) com.intellij.javaee.el (252.23591.19) com.intellij.spring.boot.initializr (252.23591.19) com.intellij.spring.boot (252.23591.19) com.intellij.spring.messaging (252.23591.19) com.intellij.spring (252.23591.19) com.intellij.spring.security (252.23591.19) com.intellij.spring.data (252.23591.19) org.jetbrains.kotlin (252.23591.19-IJ) intellij.ktor (252.23591.19) com.intellij.spring.cloud (252.23591.19) com.intellij.spring.integration (252.23591.19) com.intellij.swagger (252.23591.35) com.jetbrains.restWebServices (252.23591.19) com.jetbrains.restClient (252.23591.19) XPathView (252.23591.19) intellij.jupyter (252.23591.30) Docker (252.23591.32) com.intellij.ml.llm (252.23591.19) com.intellij.settingsSync (252.23591.19) org.jetbrains.idea.maven (252.23591.19) org.jetbrains.plugins.gradle (252.23591.19) com.intellij.reactivestreams (252.23591.19) org.jetbrains.android (252.23591.19) intellij.webpack (252.23591.19) Dart (252.23591.19) JavaScript (252.23591.19) com.intellij.flyway (252.23591.19) JBoss (252.23591.19) Tomcat (252.23591.19) com.intellij.javaee.jpa (252.23591.19) com.intellij.javaee.jakarta.data (252.23591.19) com.intellij.javaee.reverseEngineering (252.23591.19) com.intellij.micronaut (252.23591.19) com.intellij.quarkus (252.23591.19) com.intellij.hibernate (252.23591.19) com.intellij.react (252.23591.19) intellij.vitejs (252.23591.19) com.intellij.thymeleaf (252.23591.19) NodeJS (252.23591.19) org.jetbrains.plugins.vue (252.23591.32) tslint (252.23591.19) org.jetbrains.plugins.node-remote-interpreter (252.23591.30) com.deadlock.scsyntax (252.23591.30) com.intellij.plugins.webcomponents (252.23591.19) intellij.prettierJS (252.23591.19) intellij.nextjs (252.23591.19) Karma (252.23591.19) PerforceDirectPlugin (252.23591.30) org.jetbrains.security.package-checker (252.23591.35) com.intellij.beanValidation (252.23591.19) com.intellij.spring.mvc (252.23591.19) com.intellij.microservices.ui (252.23591.32) Kotlin: 252.23591.19-IJ
- IntelliJ IDEA 2025.2 EAP (Ultimate Edition)
- History
- IntelliJ IDEA 2024.3.4.1
- Update PostgreSQL JDBC Driver
dependencies { ... runtimeOnly("org.postgresql:postgresql:42.7.5") ... }
- Update PostgreSQL JDBC Driver
- IntelliJ IDEA 2024.3.2.2
- Mockito as agent over jdk 21
- Support configuring Mockito java agent in java 21+
var mockitoAgent = configurations.create("mockitoAgent") dependencies { ... testImplementation("org.mockito.kotlin:mockito-kotlin:5.4.0") mockitoAgent("org.mockito:mockito-core") { isTransitive = false } } tasks { test { jvmArgs("-javaagent:${mockitoAgent.asPath}") } }
- Support configuring Mockito java agent in java 21+
- Mockito as agent over jdk 21
- IntelliJ IDEA 2024.3
- Kotlin 2.1.0
plugins { ... kotlin("jvm") version "2.1.0" ... }
- Kotlin 2.1.0
- IntelliJ IDEA 2024.2.3
- Kotlin 2.0.20
- kotlinOptions Deprecated - https://kotlinlang.org/docs/gradle-compiler-options.html#target-the-jvm
tasks.named("compileKotlin", org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask::class.java) { compilerOptions { freeCompilerArgs.add("-Xjsr305=strict") apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0) } }
- kotlinOptions Deprecated - https://kotlinlang.org/docs/gradle-compiler-options.html#target-the-jvm
- Kotlin 2.0.20
- IntelliJ IDEA 2024.2.0.2
- PostgreSQL 16.4
- Gradle 8.8
- Kotlin 2.0.0
- Compose Multiplatform
- Compose Multiplatform
- Intellij IDEA 2024.1.1
- Kotlin 1.9.24
- Intellij IDEA 2023.3.6
- Kotlin 1.9.23
plugins { ... kotlin("jvm") version "1.9.23" ... }
- Kotlin 1.9.23
- Intellij IDEA 2023.3.4
- Kotlin 1.9.22
- kotlinc.xml
<?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="Kotlin2JvmCompilerArguments"> <option name="jvmTarget" value="21" /> </component> <component name="KotlinJpsPluginSettings"> <option name="version" value="1.9.22-release-704" /> </component> </project>
- kotlinc.xml
- Kotlin 1.9.22
- 履歴
Visual Studio Code
- 環境は、Android Studioをインストールし、同時にインストールしたkotlinを利用する
- PATH環境変数にJDKおよびkotlinのパスを設定する
- E200HA
- F:\ProgramData\jdk-12.0.1\bin
- F:\Program Files\Android\Android Studio\plugins\Kotlin\kotlinc\bin
- E230MA
- C:\Users\taish\AppData\Local\Programs\AdoptOpenJDK\bin
- C:\Program Files\Android\Android Studio\plugins\Kotlin\kotlinc\bin
- E200HA
- VSCodeにcode-runnerをインストールし、code-runnerにkotlinの呼び出しを記述する
"kotlin": "cd $dir && kotlinc-jvm.bat $fileName -include-runtime -d $fileNameWithoutExt.jar && java -jar $fileNameWithoutExt.jar"
Spring Boot
- PATH環境変数にJDKおよびkotlinのパスを設定する
- Spring Boot 3.5.0/Spring Batch 5.2.2/Spring Framework 6.2.7 2025/05/27 updated from 3.4.0
- IntelliJ IDEA 2025.2 EAP Build 2
- Kotlin 2.1.21
- Spring Framework
- PostgreSQL 17.5
- Gradle 8.8
- Amazon Coretto 22.0.1 + 言語レベル 21 / Graal VM Java17-22.2.0
- Spring解体新書(バッチ編)
- History
- Spring Boot 3.4.0 2024/12/14 updated from 3.3.4
- Deprecated AssertFile
他の検証同様、AssertJを使用するように修正- 修正前
AssertFile.assertFileEquals( FileSystemResource(_expectedFilePath), FileSystemResource(property.outputPath()))
- 修正後
val actualContent = Files.readAllBytes(File(property.outputPath()).toPath()) val expectedContent = Files.readAllBytes(File(_expectedFilePath).toPath()) assertThat(actualContent).isEqualTo(expectedContent)
- 修正前
- Deprecated AssertFile
- Spring Boot 3.2.0/Spring Batch 5.1/Spring Framework 6.1
- throttleLimitの非推奨
- TaskExecutor::setThrottleLimit -> TaskExecutor::setConcurrencyLimit
- 修正前
@Bean fun asyncTaskExecutor(): TaskExecutor { return SimpleAsyncTaskExecutor("parallel_") } StepBuilder(...) .taskExecutor(asyncTaskExecutor()) // executor .throttleLimit(3) // 同時実行数 ...
- 修正後
@Bean fun asyncTaskExecutor(): TaskExecutor { val executor = SimpleAsyncTaskExecutor("parallel_") executor.concurrencyLimit = 3 return executor } StepBuilder(...) .taskExecutor(asyncTaskExecutor()) // executor ...
- 修正前
- TaskExecutor::setThrottleLimit -> TaskExecutor::setConcurrencyLimit
- Kotlin 2.2.0
- AnnotationのターゲットをParameterに限定する
- 修正前
@Value("\${retry.num}")
- 修正後
@param:Value($$"${retry.num}")
Kotlinプログラミング
- 修正前
- AnnotationのターゲットをParameterに限定する
- Spring Boot 3.4.0 2024/12/14 updated from 3.3.4
- Android
- Chapter 22 coroutines
- Chapter 21 New Character UI
- mavenでマニフェストを作成する方法
- Hint of Challenges
- Lombokを利用する方法
companion object { private val log: Logger = LoggerFactory.getLogger(this::class.java) }
- Spring Batch+Kotlinの事例
Android Studio
- Android Studio Narwhal Feature Drop | 2025.1.2 Canary 7
Build #AI-251.26094.121.2512.13699665, built on June 26, 2025 Runtime version: 21.0.6+-13391695-b895.109 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Toolkit: sun.awt.windows.WToolkit Windows 11.0 Kotlin plugin: K2 mode GC: G1 Young Generation, G1 Concurrent GC, G1 Old Generation Memory: 2048M Cores: 8 Registry: ide.experimental.ui=true com.android.studio.ml.activeModel=com.android.studio.ml.AidaModel gradle.phased.sync.enabled=true Non-Bundled Plugins: Dart (251.25410.28) io.flutter (86.0.2)
- バージョン共通
- HyperVisor利用には、機能の有効化が必要
- 開発者向けオプション
- Android Studioの日本語化
- JetBrains公式サイトからダウンロードする。
- Android VersionとAPIの対応
- Gradle設定
- Gradleに関する設定は、環境変数GRADLE_USER_HOMEで設定したディレクトリを参照するため、変更したい場合、格納先のディレクトリを設定する
- Android SDK設定
- エミュレータのイメージ退避
- エミュレータのイメージは、ユーザの.androidディレクトリに格納されるため、移動する
- 以下のように、イメージの管理ファイル(.ini)にある格納先を変更する
path=F:\Program\.android\avd\Nexus_5X_API_28.avd
- Kotlin 2.2.0
- AnnotationのターゲットをParameterに限定する
- 修正前
@Value("\${retry.num}")
- 修正後
@param:Value($$"${retry.num}")
- 修正前
- AnnotationのターゲットをParameterに限定する
- Junit 5
- AndroidStudioでJUnit5のテスト(ParameterizedTest)を実行する
- build.gradle(app)
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2' testImplementation 'org.testng:testng:7.10.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.2' testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.2'
- build.gradle(app)
- AndroidStudioでJUnit5のテスト(ParameterizedTest)を実行する
- HyperVisor利用には、機能の有効化が必要
- バージョン対応履歴
- Narwhal
- Narwhal Feature Drop Canary 7
- Android Gradle Plugin 8.12.0-alpha06 -> 8.12.0-alpha07
- Narwhal Feature Drop Canary 6
- Firebase AI Logic への再構成
- Android Gradle Plugin 8.12.0-alpha04 -> 8.12.0-alpha06
- Narwhal Feature Drop Canary 4
- Android Gradle Plugin 8.12.0-alpha03 -> 8.12.0-alpha04
- Narwhal Feature Drop Canary 3
- Android Gradle Plugin 8.12.0-alpha02 -> 8.12.0-alpha03
- Narwhal Feature Drop Canary 2
- Android Gradle Plugin 8.11.0-alpha10 -> 8.12.0-alpha02
- Android Emulator 36.1.1
- Android Emulator HyperVisor Driver 2.2.0
- Narwhal Canary 10
- Android Gradle Plugin 8.11.0-alpha09 -> 8.11.0-alpha10
- Narwhal Canary 9
- Android Gradle Plugin 8.11.0-alpha08 -> 8.11.0-alpha09
- Narwhal Canary 8
- Android Gradle Plugin 8.11.0-alpha07 -> 8.11.0-alpha08
- Narwhal Canary 7
- Gradle 8.11.1 -> 8.13
- Android Gradle Plugin 8.10.0-rc02 -> 8.11.0-alpha07
- Narwhal Feature Drop Canary 7
- Meerkat
- Meerkat Feature Drop RC 2
- Android Gradle Plugin 8.10.0-rc01 -> 8.10.0-rc02
- Meerkat Feature Drop RC 1
- Android Gradle Plugin 8.9.0 -> 8.9.1 -> 8.10.0-rc01
- Upgrade Suggested
Beta 1からRC 1に更新したにもかかわらず、Beta 1へのアップグレードを提案される!
- Meerkat Feature Drop Canary 8
- Android Gradle Plugin 8.8.2 -> 8.9.0
- Meerkat Feature Drop Canary 7
- Android Gradle Plugin 8.8.1 -> 8.8.2
- Meerkat Feature Drop Canary 5
- Android Gradle Plugin 8.8.0 -> 8.8.1
- Meerkat Feature Drop Canary 2
- Kotlin 2.1.0 -> 2.1.10
- Update SDK
- Meerkat Canary 9 対応
- Android Gradle Plugin 8.7.3 -> 8.8.0
- Meerkat Canary 4 対応
- Kotlin 2.1.0
- Gradle 8.10 -> 8.11.1
- Android Gradle Plugin 8.7.2 -> 8.7.3
- Android Emulator v35.4.3
- Meerkat Canary 3 対応
- Android Baklava (=Android 16) Preview
- Android Emulator v35.4.2
- Meerkat Feature Drop RC 2
- Ladybug 対応
- 2024.2.1 Patch 2 対応
- Android Gradle Plugin 8.7.1 -> 8.7.2
- CompileSdk 34 -> 35
- core-ktx および core 1.15.0 は、バージョン35以上のSDKでビルドする必要あり
- 2024.2.1 Patch 1 対応
- Android Gradle Plugin 8.7.0 -> 8.7.1
- Kotlin Gradle Plugin 2.0.20 -> 2.0.21
- 2024.2.1 対応
- Android Gradle Plugin 8.6.1 -> 8.7.0
- Gradle 8.8 -> 8.9 -> 8.10
- 2024.2.1 Patch 2 対応
- Koala 対応
- Feature Drop 2024.1.2 Patch 1 対応
- Android Gradle Plugin 8.6.0 -> 8.6.1
- Feature Drop 2024.1.2 対応
- Android Gradle Plugin 8.5.2 -> 8.6.0
- Kotlin Gradle Plugin 2.0.10 -> 2.0.20
- Plugin更新には、Gradle 8.8 以上への更新必須
- 2024.1.1 Patch 2 対応
- Android Gradle Plugin 8.5.1 -> 8.5.2
- Kotlin Gradle Plugin 2.0 -> 2.0.10
- Gradle ビルドエラー
- Gradle 8.8
- Gradle 8.7 で metadata.binが見つからないエラーでビルドできないケースがあり、V8.8に更新することで解消
- Gradle 8.8
- 2024.1.1 Patch 1 対応
- Android Gradle Plugin 8.5.0 -> 8.5.1
- 2024.1.1 対応
- Android Gradle Plugin 8.4.1 -> 8.5.0
- Gradle 8.7
- Android Gradle Plugin 8.5.0 rc01 -> 8.5.0
- Android API 35
- Android SDK Built-Tools 35.0.0
- Android Gradle Plugin 8.4.1 -> 8.5.0
- RC 1 対応
- Kotlin 2.0.0
- Compose Compiler Gradle plugin に従って、Gradle設定ファイルを改修
- Android Gradle Plugin 8.5.0 beta02 -> 8.5.0 rc01
- Kotlin 2.0.0
- Beta 2 対応
- Android Gradle Plugin 8.5.0 beta01 -> 8.5.0 beta02
- Gemini 1.5
- 実行時に制限抵触に関する警告メッセージが出て、結果を取得できない
- 実行時に制限抵触に関する警告メッセージが出て、結果を取得できない
- Beta 1 対応
- Android Gradle Plugin 8.5.0 alpha05 -> 8.5.0 beta01
- Gradle 8.6 -> 8.7
- Canary 5 対応
- Android Gradle Plugin 8.5.0 alpha04 -> 8.5.0 alpha05
- Gemini 1.0 Pro
- Feature Drop 2024.1.2 Patch 1 対応
- Jellyfish 対応
- Android Gradle Plugin 8.3.2 -> 8.4.0
- Gradle 8.6
- Android Gradle Plugin 8.3.2 -> 8.4.0
- Iguana Patch 2 対応
- Android Gradle Plugin 8.3.1 -> 8.3.2
- junit4が廃要素になったための変更(junit-ktx)
dependencies { ... implementation 'androidx.test.ext:junit-ktx:1.1.5' testImplementation 'junit:junit:4.13.2' ... }
- Iguana Patch 1 対応
- Android Gradle Plugin 8.3.0 -> 8.3.1
- Iguana 対応
- Android Gradle Plugin 8.2.2 -> 8.3.0
- Hedgehog Patch 1 対応
- Android Gradle Plugin 8.2 -> 8.2.1
- Gradle 8.4
- Kotlin Gradle Plugin 1.9.21 -> 1.9.22
- Java 21
- Java 21
- Android Gradle Plugin 8.2 -> 8.2.1
- Hedgehog 対応
- Android Gradle Plugin 8.2
- Gradle 8.4
- Android Gradle Plugin 8.2
- Giraffe 対応
- Android Gradle Plugin 8.1
- Flamingo 対応
- Gradle 8.0 and Android Gradle Plugin 8.0
- AGPが使用するJVMバージョンが17になるため、プロジェクトのJVMバージョンを変更する必要あり
プロジェクトのJVMバージョンは、Project Structureで設定する
設定によって出力される build.gradle は、下記の通り
compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 }
- MySchedulerのみGradle 7.xで据え置き
- Realm-AndroidがGradle 8.0で廃止になるTransform APIを使用しているため
- AGPが使用するJVMバージョンが17になるため、プロジェクトのJVMバージョンを変更する必要あり
プロジェクトのJVMバージョンは、Project Structureで設定する
- Kotlin 1.8.20
- Gradle 8.0 and Android Gradle Plugin 8.0
- Electric Eel 対応
- Gradle 7.5 and Android Gradle Plugin 7.4.0
- Kotlin 1.8
- Dolphin 対応
- Gradle 7.4.2 and Android Gradle Plugin 7.3.0
- アップデート対応 @2022/09/25
-
起動時例外発生 ``` 内部エラーが発生しました。Please refer to https://code.google.com/p/android/issues
com.intellij.ide.plugins.StartupAbortedException: UI initialization failed at com.intellij.idea.StartupUtil.lambda$start$15(StartupUtil.java:268) at java.base/java.util.concurrent.CompletableFuture.uniExceptionally(CompletableFuture.java:986) at java.base/java.util.concurrent.CompletableFuture$UniExceptionally.tryFire(CompletableFuture.java:970) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) at java.base/java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:610) at java.base/java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:791) at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) Caused by: java.util.concurrent.CompletionException: java.lang.VerifyError: Expecting a stack map frame Exception Details: Location: com/intellij/openapi/util/text/StringUtil.pluralize(Ljava/lang/String;I)Ljava/lang/String; @7: nop Reason: Expected stackmap frame at this location. Bytecode: 0000000: 2ab0 0000 a7ff fe00 bf00 00a7 fffe
Stackmap Table: same_frame(@2) same_frame(@9)at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314) at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319) at java.base/java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:787) ... 14 more Caused by: java.lang.VerifyError: Expecting a stack map frame Exception Details: Location: com/intellij/openapi/util/text/StringUtil.pluralize(Ljava/lang/String;I)Ljava/lang/String; @7: nop Reason: Expected stackmap frame at this location. Bytecode: 0000000: 2ab0 0000 a7ff fe00 bf00 00a7 fffe Stackmap Table: same_frame(@2) same_frame(@9) at com.intellij.openapi.util.SystemInfo.isOsVersionAtLeast(SystemInfo.java:51) at com.intellij.openapi.util.SystemInfo.<clinit>(SystemInfo.java:54) at com.intellij.ui.JreHiDpiUtil.isJreHiDPIEnabled(JreHiDpiUtil.java:58) at com.intellij.ui.scale.JBUIScale.getOrComputeUserScaleFactor(JBUIScale.java:190) at com.intellij.ui.scale.JBUIScale.scale(JBUIScale.java:314) at com.intellij.ui.scale.UserScaleContext.<init>(UserScaleContext.java:26) at com.intellij.util.ui.JBUI$BaseScaleContext.<init>(JBUI.java:1408) at com.intellij.ui.scale.ScaleContext.<init>(ScaleContext.java:32) at com.intellij.ui.scale.ScaleContext.create(ScaleContext.java:108) at com.intellij.ui.scale.ScaleContextSupport.<init>(ScaleContextSupport.java:11) at com.intellij.openapi.util.IconLoader$CachedImageIcon.<init>(IconLoader.java:702) at com.intellij.ui.CoreIconManager$IconWithToolTipImpl.<init>(CoreIconManager.java:91) at com.intellij.ui.CoreIconManager.loadRasterizedIcon(CoreIconManager.java:61) at com.intellij.icons.AllIcons.load(AllIcons.java:17) at com.intellij.icons.AllIcons.<clinit>(AllIcons.java:670) at com.intellij.icons.AllIcons$Nodes.<clinit>(AllIcons.java:719) at com.intellij.ide.ui.laf.IdeaLaf.initIdeaDefaults(IdeaLaf.java:74) at com.intellij.ide.ui.laf.IdeaLaf.initComponentDefaults(IdeaLaf.java:35) at java.desktop/javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:150) at java.desktop/javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1560) at com.intellij.idea.StartupUtil.lambda$scheduleInitUi$21(StartupUtil.java:476) at com.intellij.ui.scale.JBUIScale.computeSystemFontData(JBUIScale.java:69) at com.intellij.ui.scale.JBUIScale.getSystemFontData(JBUIScale.java:360) at com.intellij.idea.StartupUtil.lambda$scheduleInitUi$22(StartupUtil.java:474) at java.base/java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:783) ... 14 more
Your JRE: 11.0.13+0-b1751.21-8125866 amd64 (JetBrains s.r.o.) D:\Program Files\Android\Android Studio\jre ```
- 原因 非推奨になった日本語化パッケージを適用していたため
- 対策
- 一旦、旧バージョンに戻し、公式情報に従って、日本語化パッケージを無効化 IntelliJ IDEA 日本語化マニュアル
- アンインストールのうえ、ユーザフォルダ配下にあるファイルを削除
- 新規インストールを行い、起動確認
- JetBrainsの日本語化パッケージを適用 Android Studio Dolphin 日本語化を行いました(Mac)
-
- Chipmunk 対応
- Gradle 7.3.3 and Android Gradle Plugin 7.2.0
- Arctic Fox 対応として吸収すべき課題 @2021/11/23 updated!
- Android Studio Arctic Fox 2020.3.1 (based IntelliJ 2020.3) Wrote first at 2021.8.20
- 環境刷新
- Kotlin 1.6.0 Update at 2021.11.23
Build.gradleでKotlinバージョンを変更 - Gradle V7.0
Project Referenceで使用するGradleのバージョンを変更- Android Gradle Plugin Version: 7.0.3 Update at 2021.11.23
- Gradle Version: 7.0.2
- JDK 11
Android Studioに含まれるJDKがJDK11に変更になり、同じJDKをGradle実行にも使用するため、Gradle SettingでAndroid Studioに含まれるJDKを使用するように変更する
build.gradle(project) Update at 2021.8.20
buildscript { ext.kotlin_version = '1.5.21' repositories { google() mavenCentral() } dependencies { classpath "com.android.tools.build:gradle:7.0.1" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
Android
- Kotlin 1.6.0 Update at 2021.11.23
- 環境刷新
- Android Studio Arctic Fox 2020.3.1 (based IntelliJ 2020.3) Wrote first at 2021.8.20
- Narwhal
- Gemini 2.5
- Gemini
- Android 15 (API 35)
- Android Studio Koala / Android SDK 35等を配置し、実行確認
- レイアウトが崩れる事象
- Android Studio Koala / Android SDK 35等を配置し、実行確認
- Android 12 / 非互換として吸収すべき課題
- SDKバージョン範囲の見直し Update at 2021.8.20
- ビルド時に下記メッセージが出るため、SDKバージョンを26以上にする
- “Invoke-customs are only supported starting with Android O (–min-api 26)”
- “Default interface methods are only supported starting with Android N (–min-api 24)
- “Static interface methods are only supported starting with Android N (–min-api 24)
- ビルド時に下記メッセージが出るため、SDKバージョンを26以上にする
- マニフェスト Update at 2021.8.20
- アクティビティのエクスポート
- manifestでintent-filterを使っている場合、android:exportedをtrueにする必要あり
<activity android:name=".MainActivity" android:exported="true"> <intent-filter> ... </intent-filter> </activity>
- manifestでintent-filterを使っている場合、android:exportedをtrueにする必要あり
- アクティビティのエクスポート
- ビューバインディング
- Android 3.5までの実装を変更する
- ビューバインディングの使用を宣言する
- build.gradle(app)
android { viewBinding { enabled = true } }
- build.gradle(app)
- ビューバインディング使用により、不要になるkotlin-android-extensionsプラグインを削除する(削除すると、下記のようになる)
plugins { id 'com.android.application' id 'kotlin-android' }
- 要素に応じた修正を行う
- アクティビティの場合
- アクティビティにバインディングクラスのインスタンス変数を追加する
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding ... }
- インポートする名前空間を変更する(上記の変数を追加するとIDEからメッセージが出る)
import kotlinx.android.synthetic.main.activity_main.*
import com.example.helloandroid.databinding.ActivityMainBinding
- 初期化時にバインディングクラスのインスタンス変数を初期化し、ルートビューへの参照を取得する
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) val view = binding.root setContentView(view) ... }
- アクティビティ内の項目へのアクセスを変更する
override fun onCreate(savedInstanceState: Bundle?) { ... tapHere.setOnClickListener { textView.text = "ボタンがタップされました" } }
↓
override fun onCreate(savedInstanceState: Bundle?) { ... binding.tapHere.setOnClickListener { binding.textView.text = "ボタンがタップされました" } }
- アクティビティにバインディングクラスのインスタンス変数を追加する
- フラグメントの場合
- フラグメントにバインディングクラスのインスタンス変数を追加する
private var _binding: ResultProfileBinding? = null // This property is only valid between onCreateView and // onDestroyView. private val binding get() = _binding!!
- フラグメントの初期化時にバインディングクラスのインスタンス変数を初期化し、ルートビューへの参照を取得する
override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = ResultProfileBinding.inflate(inflater, container, false) val view = binding.root return view }
- フラグメントの破棄時にバインディングクラスのインスタンス変数を解放する
override fun onDestroyView() { super.onDestroyView() _binding = null }
- フラグメント内の項目への参照を変更する
name.text = viewModel.name button.setOnClickListener { viewModel.userClicked() }
↓
binding.name.text = viewModel.name binding.button.setOnClickListener { viewModel.userClicked() }
- フラグメントをアクティビティ内で機能させる Update at 2021.8.21
- フラグメント生成
val fragment = TitleFragment() fragment.setTitle("フラグメント動物図鑑")
- フラグメントマネージャーの取得
val fragmentManeger = this.supportFragmentManager
- トランザクション実行
- 下記例では、トランザクション開始~フラグメント追加~トランザクション終了(コミット)を一連のブロック(commitブロック)で実行する
supportFragmentManager.commit { replace(R.id.fragmentContainerView, fragment) addToBackStack("name") // name can be null }
- 下記例では、トランザクション開始~フラグメント追加~トランザクション終了(コミット)を一連のブロック(commitブロック)で実行する
- フラグメント生成
- フラグメントにバインディングクラスのインスタンス変数を追加する
- アクティビティの場合
- 共有プリファレンス
- build.gradle(app)に以下を追加する
dependencies { ... implemetation 'androidx.preference:preference-ktx:1.1.0' ... }
- FragmentStatePagerAdapterの置換 Update at 2021.8.22
- アダプタの継承クラスのコンストラクタの継承元をFragmentStateAdapterに置き換える
- https://developer.android.com/reference/androidx/fragment/app/FragmentStatePagerAdapter
class MyAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm){ ... override fun getCount(): Int { ... } }
- https://developer.android.com/reference/androidx/viewpager2/adapter/FragmentStateAdapter
class MyAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa){ ... override fun getItemCount(): Int { ... } }
- https://developer.android.com/reference/androidx/fragment/app/FragmentStatePagerAdapter
- アクティビティでのアダプタへのアクセスを変更する
binding.pager.adapter = MyAdapter(supportFragmentManager)
↓
binding.pager.adapter = MyAdapter(this)
- アダプタの継承クラスのコンストラクタの継承元をFragmentStateAdapterに置き換える
- タイマ処理におけるハンドラ周りを見直す Update at 2021.8.22
- ハンドラ生成の見直し
var handler = Handler()
↓
Looper.prepare() val handler = Looper.myLooper()?.let { Handler(it, null) }
- ハンドラ利用の見直し(セーフアクセス修飾子)
timer(period = 5000){ handler.post { ... } }
↓
timer(period = 5000){ handler?.post { ... } }
- ハンドラ生成の見直し
- フラグメント作成後の処理手続きの変更 Update at 2021.8.22
- onActivityCreatedメソッドでの実行は非推奨となったため、フラグメントのビューをタッチするコードは、onActivityCreatedメソッドの実行直前に呼び出されるonViewCreatedメソッドでの実行に変更。その他の初期化コードは onCreate() 内での実行に変更。
override fun onActivityCreated(...){ ... }
↓
override fun onViewCreated(...){ ... }
- onActivityCreatedメソッドでの実行は非推奨となったため、フラグメントのビューをタッチするコードは、onActivityCreatedメソッドの実行直前に呼び出されるonViewCreatedメソッドでの実行に変更。その他の初期化コードは onCreate() 内での実行に変更。
- SoundPool(Lollipopで非推奨) Update at 2021.8.25
soundPool = SoundPool.Builder() .setMaxStreams(1) .setAudioAttributes(audioAttributes) .build()
- PendingIntent.getBroadcast Update at 2021.8.25
- lintでMuttable Flagを指定されていないと指摘されるため、指定するように変更
- SimpleDateFormat Update at 2021.8.25
- lintでロケールを指定するよう指摘されるため、ロケールを指定するように変更
- Realm 環境の更新 Update at 2021.8.28
- build.gradle(project)
buildscript { repositories { google() mavenCentral() jcenter() } dependencies { classpath "com.android.tools.build:gradle:7.0.1" classpath "io.realm:realm-gradle-plugin:10.7.0" } } allprojects { repositories { google() mavenCentral() jcenter() } dependencies { } } task clean(type: Delete) { delete rootProject.buildDir }
- build.gradle(app)
plugins { id 'kotlin-kapt' id 'realm-android' } ... realm { syncEnabled = true }
Androidプログラミング
- build.gradle(project)
- build.gradle(app)に以下を追加する
- SDKバージョン範囲の見直し Update at 2021.8.20
- プロジェクト残課題状況
- AnimalBook
- MyCountdownTimer No Problem
- リセット時に3:00に表示が戻らない
- リセット後、すぐにカウントダウンするため、2:59になることで問題なし
- リセット時に3:00に表示が戻らない
- MyScheduler
- MySlideshow
- 起動時にNotImplementedErrorで起動できない Fixed
- Arctic Fox対応でビューバインディングを導入した際のコード移行漏れ
- 起動時にNotImplementedErrorで起動できない Fixed
- IntelliJ IDEA 2024.3.4.1