
Appiumで急にこう怒られた。
Original error: Activity name ‘.com.squareup.leakcanary.internal.DisplayLeakActivity’ used to start the app doesn’t exist or cannot be launched! Make sure it exists and is a launchable activity
ログ全体はこんな感じ。
Selenium::WebDriver::Error::UnknownError: An unknown server-side error occurred while processing the command. Original error: Cannot start the 'com.daipresents' application. Visit https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md for troubleshooting. Original error: Activity name '.com.squareup.leakcanary.internal.DisplayLeakActivity' used to start the app doesn't exist or cannot be launched! Make sure it exists and is a launchable activity
LeakCanaryはメモリリーク検出用のライブラリだけど、アプリを起動するときにそんなActivityを起動したいわけではない。
解決に3日かかったので結論だけ書くと・・・Appiumのログにはこういうログが出ていた。
[AndroidDriver] Parsing package and activity from app manifest [ADB] Using 'apkanalyzer' from '/Users/daipresents/Library/Android/sdk/tools/bin/apkanalyzer' [ADB] Starting '/Users/daipresents/Library/Android/sdk/tools/bin/apkanalyzer' with args ["-h","manifest","print","/Users/daipresents/sample.apk"] [ADB] Using the alternative activity name detection method because of: Command '/Users/daipresents/Library/Android/sdk/tools/bin/apkanalyzer -h manifest print /Users/daipresents/sample.apk' exited with code 1 [ADB] Using 'aapt' from '/Users/daipresents/Library/Android/sdk/build-tools/29.0.1/aapt' [ADB] Extracting package and launch activity from manifest [ADB] Package name: 'com.daipresents' [ADB] Main activity name: 'com.squareup.leakcanary.internal.DisplayLeakActivity'
どうやら apkanalyzer をつかってAndroidManifest.xml を解析しているのだけどそれがエラーとなり、かわりに aapt を使ったけど結果的にMain activity を間違っているみたい。
間違えんなよ!
ためしに問題のコマンドを叩いてみるとこうなる。
$ /Users/daipresents/Library/Android/sdk/tools/bin/apkanalyzer -h manifest print /Users/daipresents/sample.apk
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.(AndroidSdkHandler.java:81)
at com.android.tools.apk.analyzer.ApkAnalyzerCli.getAaptInvokerFromSdk(ApkAnalyzerCli.java:277)
at com.android.tools.apk.analyzer.ApkAnalyzerCli.main(ApkAnalyzerCli.java:129)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
… 5 more
stack overflow にも似たような問題が書かれている。
参考: Failed to install android-sdk: “java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema”
どうやら Javaのバージョンに問題があるみたいなので、JDK8を入れる必要がありそうで、入れ直したらなおった!
Java 8はライセンスの関係で利用できないので、Brewを使うなら「brew cask install adoptopenjdk8」 とかが使える。