【Android】apkをインストールしたらメイン画面(アプリ一覧)にアプリが表示されないときのAndroidManifest.xmlの書き方
Railsおじさんでしたが、Androidとの殴り合いが増えてきまして、泣きながら戦っていて、インターネットにあまりにも情報が足りないと思ったので筆をとりました。
この記事の対象読者
- apkをインストールしたらメイン画面(アプリ一覧)にアプリが表示されない人(タイトルそのまま)
ここに書いてあるんですけど、 そしてここに書いてあることばっかり検索に出てくるんですけど、 やってんだよこっちは!!って思ったときにドツボにハマったので、 同じ悩みを抱える人が今後二度と現れて欲しくないので書いています。
Androidアプリがメイン画面に表示される条件
余計なのもついてるかもしれないけど、100%動いてほしいので確信がないやつも書いています。 なくてもいいだろ、関係ないだろ、というのは外しています。 かなり最低限の構成にすると以下のような感じ。
com.hogeapp.fuga
とか @mipmap/ic_launcher
とか @string/app_name
とかはよしなにしてください。不安な人は名前まで合わせちゃうと確実に動くと思います。
name, label, Activityの指定、intent-filterにあの二つの記載をすること、が重要みたいです。
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hogeapp.fuga" android:versionCode="1" android:versionName="1.0"> <application android:name=".MainApplication" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
今回詰むに至った原因
差し障りなさそうな範囲で書くと、ReactNativeで動けばええやろということで以下のような感じに書いてたんですけど、
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hogeapp.fuga" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:name=".MainApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="main" android:scheme="hogeapp" /> </intent-filter> </activity> (中略) </application> </manifest>
これは詰みます。 次のように、必ずintent-filterを分けて書くことが肝要です。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hogeapp.fuga" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:name=".MainApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- ここと --> <intent-filter> <!-- ここね --> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="main" android:scheme="hogeapp" /> </intent-filter> </activity> (中略) </application> </manifest>
これに気づけなくて「情報全部揃ってるだろ!」って6時間ぐらいインターネットをさまよいました。かなしい。
というわけで、皆さんも気をつけてください。よろしくお願いします。