概要
Android Studio 2021.2.1(Chipmunk)がリリースされたので、Android Studio 2021.1.1(Bumblebee)を起動するとUpgradeの案内が表示されて承認するとUpgradeが始まります。
多くの人は、Android StudioをPleiades(https://mergedoc.osdn.jp/ )の日本語化をしていると勝手に思っていますが、今回、ChipmunkにUpgradeするとエラーで起動しなくな ります。(私だけかもしれませんが) ることがあります。
今回は、その復旧(あくまで起動するまで)をする手順です。 と解消方法の説明です。
再インストールしても解消しないので、めげないで読んでください。
【Update2022.05.15】
日本語化するためのPleiades日本語化のバージョンが、本件に関連してます。
なので、古いバージョンを使うことで回避できるようになります。
詳細は、最下端へ記載してます。
前提
- Windows10
- Android Studio Bumblebee(2021.1.1)
- Pleiades日本語化(Ver pleiades-2022.05.05)
症状の整理
まずは、Upgrade後の初回起動をすると、下記のようなダイアログが表示されます。
そして、「OK」を押してもAndroid Studioが起動することはありません。
Error launching Studio
Could not find main class com/intellij/idea/Main
「あ~、また日本語化している状態でAndroid StudioのUpgradeしたときと同じで、再度日本語化を実行しないといけないパターンかな?」
と思っていたのですが、、、、
今回は違ってました。
まず、再度Pleiades日本語化を実行しても起動しない。症状は同じまま。
エラー内容をググると「Android Studioを入れなおせ」と言われるのだが、そこまで重症な気がしない、、、、
解消方法(暫定)
最終的な解消方法は、後日アップデートをしないといけないとは思いますが、今は「日本語を一旦オフにする」ことで解消させます。
(つまり、原因としては日本語化にありそうだ。ということ)
最終行の「Pleiadesの設定が追加されるファイル」のパスを確認して、「studio64.exe.vmoptions」ファイルをエディタで開きます。
# Custom VM options (Generated by Pleiades Installer)
# See https://pleiades.io/pages/pleiades_jetbrains_manual.html
#-Xms256m
#-Xmx1280m
-XX:ReservedCodeCacheSize=512m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-Dsun.io.useCanonCaches=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Djdk.module.illegalAccess.silent=true
-Dkotlinx.coroutines.debug=off
-Djna.nosys=true
-Djna.boot.library.path=
-Didea.vendor.name=Google
-Dfile.encoding=UTF-8
-XX:+IgnoreUnrecognizedVMOptions
-Xverify:none
-javaagent:C:\Users\XXXX\AppData\Roaming\Google\AndroidStudio2021.2\jp.sourceforge.mergedoc.pleiades\pleiades.jar
「studio64.exe.vmoptions」の最終行にある「-javaagent」の行をコメントアウトすると、Pleiades日本語化をオフにできます。
今回は、この行をコメントアウト(行頭に「#」をつけるだけ)して、日本語化をオフにすることで「暫定対処」します。
# Custom VM options (Generated by Pleiades Installer)
# See https://pleiades.io/pages/pleiades_jetbrains_manual.html
#-Xms256m
#-Xmx1280m
-XX:ReservedCodeCacheSize=512m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-Dsun.io.useCanonCaches=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Djdk.module.illegalAccess.silent=true
-Dkotlinx.coroutines.debug=off
-Djna.nosys=true
-Djna.boot.library.path=
-Didea.vendor.name=Google
-Dfile.encoding=UTF-8
-XX:+IgnoreUnrecognizedVMOptions
-Xverify:none
#-javaagent:C:\Users\XXXX\AppData\Roaming\Google\AndroidStudio2021.2\jp.sourceforge.mergedoc.pleiades\pleiades.jar
Android Studioを起動します。
無事起動しました。(日本語化はオフなので頑張って英語を読みましょう)
【追記2022.05.15】調査完了
この症状になるのは、どうやら全てではないようです。
もう1台のPCに入っていたAndroid Studioは、Upgrade後も普通に起動しました。
となると、原因を見つけることが必要になります。
まずは、いろいろ試してみます。
設定ファイルを再度作らせてみる
C:\Users\(ユーザー名)\AppData\Roaming\Google
上記の「AndroidStudio2021.2」フォルダが今回のものになるので、これを一旦、リネームしてAndroidStudioを起動します。
そうすると、前バージョンである「AndroidStudio2021.1」の設定を使って再度作成されます。
結果は、同じくエラーになりました。
これは、前バージョンで日本語化の行がすでに存在しているので、再作成をされても日本語化がオンになっているためです。
ということで、行をコメントアウトすると、やはり正常に起動します。
設定を初期化してみる
C:\Users\(ユーザー名)\AppData\Roaming\Google
このフォルダに存在している「AndroidStudioXXXX」を全て、一旦別の場所に移動します。
(新しいフォルダを作成して、その中に入れてもOK)
そうすると、Android Studioがインストール直後の状態で起動します。
この状態で、日本語化してみます・・・・・・同じエラーになりました。
ぐぬぬぬ・・・
Pleiadesのログを見る
C:\Users\(ユーザー名)\AppData\Roaming\Google\AndroidStudio2021.2\jp.sourceforge.mergedoc.pleiades\cache\pleiades.log
日本語化している状態でAndroid Studioを起動すると、上記のLogファイルに起動のログが追記されます。
INFO 08:28:21.052 [ForkJoinPool-1-worker-5] (LauncherTransformer) Pleiades AOP 起動トランスフォーマーを開始します。LauncherIdeaTransformer 0.023 秒
INFO 08:28:21.035 [ForkJoinPool-2-worker-5] (LauncherTransformer) キャッシュが存在しないため、強制的に -clean モードで起動します。
INFO 08:28:21.071 [ForkJoinPool-2-worker-19] (UpdateDetector) ファイル更新最終時刻 (前回): 2022-05-15 07:56:47
INFO 08:28:21.075 [ForkJoinPool-2-worker-19] (UpdateDetector) ファイル更新最終時刻 (今回): 2022-05-15 07:56:47
ERROR 08:28:21.077 [main] (LauncherTransformer) バイトコード変換不可 util.jar/com/intellij/util/io/Murmur3_32Hash jp.sourceforge.mergedoc.javassist.NotFoundException: main(..) is not found in com.intellij.util.io.Murmur3_32Hash jp.sourceforge.mergedoc.javassist.CtClassType.getMethod(CtClassType.java:1275)
jp.sourceforge.mergedoc.javassist.NotFoundException: main(..) is not found in com.intellij.util.io.Murmur3_32Hash
at jp.sourceforge.mergedoc.javassist.CtClassType.getMethod(CtClassType.java:1275)
at jp.sourceforge.mergedoc.pleiades.runtime.LauncherTransformer.transformBytecode(LauncherTransformer.java:217)
at jp.sourceforge.mergedoc.pleiades.runtime.AbstractTransformer$DefaultTransformerDelegate.transform(AbstractTransformer.java:194)
at jp.sourceforge.mergedoc.pleiades.runtime.AbstractTransformer$DefaultTransformerDelegate.execute(AbstractTransformer.java:82)
at jp.sourceforge.mergedoc.pleiades.runtime.AbstractTransformer.transform(AbstractTransformer.java:342)
at jp.sourceforge.mergedoc.pleiades.runtime.LauncherTransformer.transform(LauncherTransformer.java:203)
at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at com.intellij.util.lang.ClasspathCache.getPackageNameHash(ClasspathCache.java:155)
at com.intellij.util.lang.ClasspathCache.getClassLoadersByName(ClasspathCache.java:151)
at com.intellij.util.lang.ClassPath.findClass(ClassPath.java:172)
at com.intellij.util.lang.UrlClassLoader.findClass(UrlClassLoader.java:221)
at com.intellij.util.lang.PathClassLoader.findClass(PathClassLoader.java:65)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
INFO 08:28:21.101 [ForkJoinPool-1-worker-23] (PleiadesConfig) Pleiades 構成ファイルをロードしました。pleiades-config-idea.xml
INFO 08:28:21.222 [ForkJoinPool-1-worker-19] (LauncherIdeaTransformer) 追加クラスパスあり: C:\Program Files\Android\Android Studio\plugins\IntelliLang\lib\IntelliLang.jar
INFO 08:28:21.222 [ForkJoinPool-1-worker-19] (LauncherIdeaTransformer) 追加クラスパスあり: C:\Program Files\Android\Android Studio\plugins\Kotlin\lib\kotlin-plugin.jar
INFO 08:28:21.229 [ForkJoinPool-1-worker-19] (LauncherIdeaTransformer) 追加クラスパスなし: C:\Program Files\Android\Android Studio\plugins\sdk-updates\lib\sdk-updates.jar
INFO 08:28:21.229 [ForkJoinPool-1-worker-19] (LauncherIdeaTransformer) 追加クラスパスなし: C:\Program Files\Android\Android Studio\plugins\tfsIntegration\lib\tfsIntegration.jar
なんかエラーが出てますね。
え~と、、、
ERROR 08:28:21.077 [main] (LauncherTransformer) バイトコード変換不可 util.jar/com/intellij/util/io/Murmur3_32Hash jp.sourceforge.mergedoc.javassist.NotFoundException: main(..) is not found in com.intellij.util.io.Murmur3_32Hash
Javaのutil.jar内にMurmur3_32Hashがないよ。ってか?
そんなばかな・・・・
ということで、util.jarを見てみます。
いや、いるし、、、、
Androidを再インストールしてみる
最終手段で、Android Studioを一旦アンインストールして、インストールしてみます。
日本語化はオフにして起動・・・・・うむ、起動した。(ここまでは予想通り)
日本語化します・・・・起動・・・・・エラー!!!!!
あれ?再インストールしてもダメじゃん。
正常に起動するPCとの違いはなんだ?
そう、全部の日本語化したAndroid Studioが起動しなくなるわけではないのです・・・・
ならないPCもあった・・・・
その違いはなんだ?
ということで、結論から書きます。
それは、日本語化アプリのバージョン!
そう、バージョンの違いで本件の状況が起きるんです!
冒頭の前提条件でも書いたように、この現象は「最新版」で起きてます。
1,2バージョン古いものも起きる可能性がありますが、少なくとも下記のバージョンは日本語化しても正常に起動してきます。
「でも、最新版以外のバージョンは入手できないじゃん!」
そうですね、でも解決策があります。
それは、同時に公開されている「Java8対応版」を使う こと。
こっちだと、2021.05のバージョンになっており、こっちは正常に日本語化が行われ起動します。
ということで、レッツ!日本語化!
☆一応macOS版も試してみたら、起動さえしなくなるので、上記の「Java8対応版」を使って再度日本語化すると、正常に起動してくるようになるのを確認しました。
※一応、解決策が分かったので、特にPleiades日本語化のissuesには挙げないつもりですが、挙げたい人はやってみてください。