Android 開発トラブルシューティング
Android でクラッシュしたときのバグレポート方法

Android のビルドプロセス

Android アプリのビルドプロセスには 2段階あります。

  1. 必要なすべてのライブラリとシリアライズされたアセットを含むアプリケーションパッケージ(.apk ファイル)を生成します。

  2. アプリケーションパッケージを実際のデバイスにデプロイします。

File > Build Settings… または File > Build & Run を選択し、 Build Settings ダイアログボックスを開きます。

Build Settings ダイアログボックスで Build And Run ボタンを押すと、両方のステップが実行されます。キーボードで Cmd+B を入力すると、最後に使用したファイルをビルドターゲットと仮定して自動ビルドを発動しプロセスを実行します。

If you select Build in the Build Settings ダイアログボックスで Build を選択すると、Unity は 1番目のプロセスのみを行います。

Android プロジェクトの初回ビルド時には、Android SDK の場所を聞かれます。これは Android アプリをビルドしてデバイスへインストールするために必須です。SDK の場所は後から Unity Preferences ダイアログボックス (menu: Unity > Preferences) で変更可能です。

Android にアプリをビルドする場合は、開発者オプションUSB デバッグ疑似ロケーションを許可 チェックボックスをオンにしてください。

Android SDK/platform-tools フォルダーにある adb devices コマンドを実行してください。そうすると、オペレーティングシステムからデバイスが見えるようになります。Mac と Windows、どちらにでも有効に作動します。

Unity によってアプリケーション アーカイブ(.apk ファイル)が作成され、接続されたデバイスにインストールされます。

場合によってはアプリケーションが (例えば iPhone のように) 自動的に起動しないことがあります。その場合には画面ロックを解除してください。また、メニュー内で新規インストールされたアプリケーションを探す必要があることも稀にあります。

Texture Compression(テクスチャの圧縮)

Build Settings ダイアログボックスの中に Texture Compression オプションがあります。デフォルトで、個別にテクスチャ形式をオーバーライドしないテクスチャに関しては、ETC1/RGBA16 テクスチャ形式が使用されます (2D テクスチャ/プラットフォームごとのオーバーライド を参照)。

アプリケーションアーカイブ (.apk ファイル) を特定のハードウェアアーキテクチャ用に作成したい場合は、Texture Compression オプションを使ってこのデフォルトビヘイビアをオーバーライドします。 圧縮しない設定にしてあるテクスチャは処理されません。圧縮テクスチャ形式を使用しているテクスチャにのみ Texture Compression で選択された形式が使用されます。

選択されたテクスチャ圧縮をサポートしているデバイスにだけアプリケーションをデプロイするようにするため、Unity は、選択された特定形式に適合したタグを含むように AndroidManifest を編集します。

ビルドマニフェストに自動的に加わるパーミッション

Unity はマニフェストにあるパーミッションを加えます。ロジックは PlatformDependent/AndroidPlayer/Editor/Managed/PostProcessor/Tasks/GenerateManifest.cs :: SetPermissionAttributes ファイルで定義されます。例えば、スクリプトコードが Application.internetReachability を参照する場合は、Unity は自動的に android.permission.ACCESS_NETWORK_STATE をマニフェストに加えます。GenerateManifest.cs を編集してそれを削除することも可能です。

以下は /GenerateManifest.cs :: SetPermissionAttributes のコンテンツです。

private void SetPermissionAttributes(PostProcessorContext context,

AndroidManifest manifestXML,

AssemblyReferenceChecker checker)

{

// Add internet permission if it's necessary

if (_developmentPlayer || PlayerSettings.Android.forceInternetPermission || doesReferenceNetworkClasses(checker))

manifestXML.AddUsesPermission("android.permission.INTERNET");


if (checker.HasReferenceToMethod("UnityEngine.Handheld::Vibrate"))

manifestXML.AddUsesPermission("android.permission.VIBRATE");


if (checker.HasReferenceToMethod("UnityEngine.iPhoneSettings::get_internetReachability")

|| checker.HasReferenceToMethod("UnityEngine.Application::get_internetReachability"))

manifestXML.AddUsesPermission("android.permission.ACCESS_NETWORK_STATE");


if (checker.HasReferenceToMethod("UnityEngine.Input::get_location")

|| checker.HasReferenceToMethod("UnityEngine.iPhoneInput::get_lastLocation")

|| checker.HasReferenceToMethod("UnityEngine.iPhoneSettings::get_locationServiceStatus")

|| checker.HasReferenceToMethod("UnityEngine.iPhoneSettings::get_locationServiceEnabledByUser")

|| checker.HasReferenceToMethod("UnityEngine.iPhoneSettings::StartLocationServiceUpdates")

|| checker.HasReferenceToMethod("UnityEngine.iPhoneSettings::StopLocationServiceUpdates"))

{

manifestXML.AddUsesPermission("android.permission.ACCESS_FINE_LOCATION");

manifestXML.AddUsesFeature("android.hardware.location.gps", false /*encourage gps, but don't require it*/);

// This is an implied feature, make it not required to support Android TV

manifestXML.AddUsesFeature("android.hardware.location", false);

}


if (checker.HasReferenceToType("UnityEngine.WebCamTexture"))

{

manifestXML.AddUsesPermission("android.permission.CAMERA");

// By default we don't require any camera since a WebCamTexture may not be a crucial part of the app.

// We need to explicitly say so, since CAMERA otherwise implicitly marks camera and autofocus as required.

manifestXML.AddUsesFeature("android.hardware.camera", false);

manifestXML.AddUsesFeature("android.hardware.camera.autofocus", false);

manifestXML.AddUsesFeature("android.hardware.camera.front", false);

}

Google Android プロジェクト

Android Studio で開くことのできるプロジェクトを生成します。下記の手順にしたがってください。

  1. Android Studio をダウンロードします。
  2. Google Android project のチェックボックスをオンにした上で、Unity からプロジェクトをエクスポートします。
  3. Android Studio を開きます。
    • File > Import Project を選択します。 パスを選びます (例えば、プロジェクトを C:\MyProjects にエキスポートした場合は、C:\MyProjects\<Product Name\> のパスを選択)。
    • Import Destination Folder を選びます。
    • Language Level Changed ダイアログボックスでプロジェクトの再読み込みを促されたら、Yes を選択します。

注意 アプリケーションをデバッグしたい場合は、AndroidManifest.xml で必ず android:debuggable="true" と設定し、終了後は忘れずに false に設定し直してください。

Android 開発トラブルシューティング
Android でクラッシュしたときのバグレポート方法