#はじめに
Oculusのアプリで、極端に大きなapkだと分割してストアに上げないといけないのですが、
ADX2のデータは、Unityの標準のobb(APKの拡張ファイル)ではストリーム再生ができないので、
Android Studioにあるjobbなるツールでまとめる必要がある。
このobbを作成し、さらにOculusの実機へpushするのが手間なので、スクリプト1回実行して済ませるようなものを作ってみました。
#この記事の対象
- ADX2でjobbでobbを作りたい人
- ADX2のスクリプトで外部プロセスを呼びたい人
#環境
Craft 3.45.00
#jobb
jobbは以下
これを使えばよいのですが、バグがあるっぽく別途
のfat32を使う必要がある。
#adb
adbもAndroid Studioに入っている。
Android studio
JDK
などインストールや、
adb,jobbのパスなど環境変数の設定などが必要かも。
#スクリプト
subprocessで2つ実行しています。
失敗したときの処理があまりないので、変な時は手動で中断してください。
パスやデバイスIDなども適宜書き換えてください。
# --Description:[tatmos][Build]adx2フォルダをObbファイルにまとめる
import sys
import os
import cri.atomcraft.debug as acdebug
import subprocess
import cri.atomcraft.view as acview
# まとめるフォルダ
srcPath = "C:/MyDearest/github/MDSoundPreview/Assets/StreamingAssets/adx2/"
# 出力フォルダ
outPath = "C:/MyDearest/"
# 出力するObbファイル名
outputFileName = "ADX2.obb"
# アプリのビルドバージョン
appBuildVersion = 1
# アプリのPackageName
appPackageName = "com.MyDearest.MDSoundPreview"
# 転送先のデバイスID : adb devicesなどで調べる
deviceId = "XXXXXXXXXXXXXX"
if not os.path.exists(srcPath):
acdebug.log("srcPath がありません。")
sys.exit()
# jobb
cmd1 = "jobb.bat"
cmd2 = "-d \"{0}\"".format(srcPath);
cmd3 = "-o \"{0}\"".format(outPath + outputFileName);
cmd4 = "-pn \"{0}\"".format(appPackageName);
cmd5 = "-pv {0}".format(appBuildVersion);
acdebug.log([cmd1 + " " + cmd2 + " " + cmd3 + " " + cmd4 + " " + cmd5])
message = subprocess.check_output(cmd1 + " " + cmd2 + " " + cmd3 + " " + cmd4 + " " + cmd5)
acdebug.log(message.decode().strip())
message = "続いて転送します"
button_name_list = ["続ける", "キャンセル"]
result = acview.show_dialog(message, button_name_list)
if result [ "data" ][ "button_name" ] == "キャンセル" or result [ "data" ][ "button_index" ] == "-1":
sys.exit()
# push
cmd1 = "adb"
cmd2 = "-s {0}".format(deviceId);
cmd3 = "push {0}".format(outPath + outputFileName);
cmd4 = "/storage/emulated/0/Android/obb/{0}/{1}".format(appPackageName,outputFileName);
acdebug.log([cmd1 + " " + cmd2 + " " + cmd3 + " " + cmd4])
message = subprocess.check_output(cmd1 + " " + cmd2 + " " + cmd3 + " " + cmd4)
message2 = message.decode().strip().split("\r\n")
for m in message2:
if not str(m).startswith("["):
acdebug.log(m)
check_outputで帰ってくるメッセージに進捗的なものが含まれていて、
これをログ出力するとADX2が重くなるので、分割しつつ、不要な進捗は表示しないようにしています。
check_output
message2 = message.decode().strip().split("\r\n")
for m in message2:
if not str(m).startswith("["):
acdebug.log(m)
おわりに
adbコマンドも叩けるので、少し応用すれば、
サウンドデータ差し替えて、転送して、実行して、実機で確認
とかがなるべく手間なくできる環境が作れるかと思います。