【Unity】Androidの実機ビルドで個人的に躓いたポイントまとめ
Androidの実機ビルドが上手くいかないポイントは無限にあるそうですが、中でも自分が躓いたポイントについてメモ書きです。
◆環境
OS X 10.2
Unity2017.1
ItemStore利用 https://item-store.net/
◆実機ビルドで躓いたポイント
1.Unity Projectのディレクトリが日本語のままだった
日本語フォルダ名やファイル名だと上手く動かないシステムは少なくないですが、iOSビルドなど今までは問題なかったんですよね。Androidは日本語NOらしいので対応が必要そうです。こちらを参考に対応しました。
https://qiita.com/is0me/items/0b7b846f1f0860629950
2.ItemStoreをインストールして内包されるAndroidManifestは、中身を書き換える必要があった
チュートリアルではパッケージ名を書き換えるよう記載がありますが、それ以外にもAndroidSDKに含まれるAndroidManifestに合わせて何箇所か書き換える必要があるようです。
//Android SDK の AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="preferExternal"
android:versionCode="2"
android:versionName="1.1">
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true"/>
<application
android:theme="@style/UnityThemeSelector"
android:icon="@drawable/app_icon"
android:label="@string/app_name">
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
</manifest>
//ItemStoreのAndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.AzumaInc.ReRotation"
android:installLocation="preferExternal"
android:versionCode="2"
android:versionName="1.1"> //※バージョンを合わせる
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true"/>
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="26" /> //※バージョンを合わせる
<!-- require AppC -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- require itemstore -->
<uses-permission android:name="com.android.vending.BILLING" />
<!-- require Push Start -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> //※削除する
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" >
</uses-permission>
<uses-permission android:name="com.AzumaInc.ReRotation.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name="com.AzumaInc.ReRotation.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<!-- require Push End -->
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name">
<activity
android:label="@string/app_name"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale"
android:name="com.unity3d.player.UnityPlayerNativeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- require itemstore Start -->
<activity
android:name="net.app_c.sdk.ItemStoreActivity"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|uiMode|touchscreen"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<!-- require itemstore End -->
<!-- require Push Start -->
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.AzumaInc.ReRotation" />
</intent-filter>
</receiver>
<service android:name="net.app_c.sdk.PushService" />
<!-- require Push End -->
<!-- require Recover Start -->
<activity
android:name="net.app_c.sdk.RecoverGenerateActivity"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|uiMode|touchscreen"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<activity
android:name="net.app_c.sdk.RecoverRestoreActivity"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|uiMode|touchscreen"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<!-- require Recover End -->
</application>
</manifest>
ItemStoreのAndroidManifestで書き換えた箇所はこちらの2箇所でした。
android:versionName="1.1"> //※バージョンを合わせる
android:targetSdkVersion="26" /> //※バージョンを合わせる
こんなエラーが出てました。ログの詳細をちゃんと見れば何となく分かりました。
CommandInvokationFailure: Unable to merge android manifests. See the Console for more details.
ちなみにビルドには問題ないですが、アプリを立ち上げた時に「連絡先の取得を許可しますか?」と認証を求めるポップアップが表示されてしまうので、使わない場合は次の箇所は削除した方がいいです。
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> //※削除する
どなたかの参考になれば幸いです。