質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1990閲覧

UnityのAndroidアプリを実機で実行すると指定ファイルが見つからないエラーが出る

groggy_egg

総合スコア24

PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/01 02:09

目的
Unityで作成したAndroidアプリを実機で動かしたい


経緯

  • PythonのプログラムをPyinstallerでexe化

pyinstaller hoge.py --onefile でコマンド実行 参考

  • Unityから上記のexeを実行

c#

1 private string FS = Path.DirectorySeparatorChar.ToString();//ファイルセパレーター 2 //exeがある場所 3 private string pyExePath; 4 //Resourcesフォルダのパス 5 private string ResourcesPath; 6 //実行したいスクリプト名 7 private string scriptname = @"hoge.exe"; 8 private string args; 9 10 private void Start() 11 { 12 ResourcesPath = Application.dataPath + FS + "Resources"; 13 pyExePath = ResourcesPath + FS + scriptname; 14 args = ""; 15 } 16 17 public string callPython(string text) 18 { 19 //外部プロセスの設定 20 System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis"); 21 ProcessStartInfo processStartInfo = new ProcessStartInfo() 22 { 23 FileName = pyExePath, //実行するファイル(python) 24 UseShellExecute = false,//シェルを使うかどうか 25 CreateNoWindow = true, //ウィンドウを開くかどうか 26 RedirectStandardOutput = true, //テキスト出力をStandardOutputストリームに書き込むかどうか 27 StandardOutputEncoding = enc, //エンコード 28 Arguments = args + " " +text, //実行するスクリプト 引数(複数可) 29 }; 30 31 //print("-------------start"); 32 //外部プロセスの開始 33 Process process = Process.Start(processStartInfo); 34 35 //ストリームから出力を得る 36 StreamReader streamReader = process.StandardOutput; 37 string str; 38 string lines=""; 39 string result=""; 40 while ((str = streamReader.ReadLine()) != null) 41 { 42 if (str.StartsWith("-")) 43 { 44 result = str; 45 print("str:"+str); 46 } 47 //print(str); 48 lines += str+"\n"; 49 } 50 51 //外部プロセスの終了 52 process.WaitForExit(); 53 process.Close(); 54 //print(lines); //コンソールログ 55 this.logger.Log(lines); //LogFile出力 56 57 //print("------------end"); 58 59 return result; 60 }
  • Unityのプログラムを実機でテスト

USBデバッグでスマホ(Xperia,Android7.0)を接続しUnityでビルド&実行
(Android SDKのmonitor.bat でログ取得 参考)

エラーが出たのでpythonの__file__sys.argv[0]に修正 参考

  • 修正後再度実行

下記エラー発生(monitor.batのログ)
Level:E
Tag:Unity
Text:Win32Wxception: ApplicationName='/data/app/***-2/base.apk/Resources/hoge.exe', CommandLine=' ***', CurrentDirectory='', Native error=Cannot find the specified file


Pythonのプログラムはexe単体で実行可能で
UnityのプログラムもPCではエラーなく動作するので
「指定されたファイルが見つからない」のは
「どこのプログラムから」「どのファイルが」見つからないのかわかりません

エラーコードで検索してみたのですがMac環境で発生した場合だったり
同様の事例は見つけられませんでした。

ご教授願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そもそも、exeファイルはwindows上で動作するものですので、Androidでは動作しません。

投稿2020/05/01 02:31

fiveHundred

総合スコア10152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

groggy_egg

2020/05/01 02:47

pythonを別の形式の実行ファイルにして呼び出せば実行できるでしょうか? それとも他の方法を試すべきでしょうか? どうすればいいのかわかりません
fiveHundred

2020/05/01 05:20

なぜPythonを動かそうとしているのか分からないため、何とも言えませんが、C#に移植できる内容であれば、そうしたほうがよろしいかと思います。
groggy_egg

2020/05/03 01:21

C#では使えないpython用のライブラリを使っているためPythonを使いたいです。 C#(Unity)を使う理由はPython用のAndoroid開発環境(Kivyなど)では InputAreaへの全角入力(日本語)にいろいろと問題が多かったからです。
fiveHundred

2020/05/03 03:26

「C#では使えないpython用のライブラリ」が何なのか分からないので、何ともいえませんが、例えばtensorflowではスマホ上で動かすことができるtensorflow liteというものもあるので、もしかしたらそのような代用策があるかもしれません。
groggy_egg

2020/05/04 00:29

返信ありがとうございます。 JUMAN,KNPのPython用バインディングのpyknpを使っています。 以前はC#から外部プロセス呼び出しでKNPを使おうとしていたのですが プロジェクトにKNPを入れるとプロジェクトの読み込み時にUnityがフリーズしてしまったため KNP←Python(exe化してプロジェクトにインポート)←C#(Unity) で今試しているところです。
groggy_egg

2020/05/04 04:17

exeファイルがAndroidで使えないことを知らなかったので参考になりました。 回答と長話にお付き合いいただきありがとうございました。 内容を整理して改めて質問し直します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問