見出し画像

【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" /> //※削除する

どなたかの参考になれば幸いです。

いいなと思ったら応援しよう!