見出し画像

【Android】パッケージ名からクラス名を取得しアプリケーションを起動する【UWSC】

動作環境情報

OS :Windows10
アプリ:Nox Player 6.3.0.0
ツール:UWSC Ver 5.1.1

Nox Player:https://jp.bignox.com/

やりたいこと

Androidを操作せずOS側からADBコマンドにて任意のアプリケーションを起動する。

引用元:https://noitalog.tokyo/adb-shell-start/

上記を参考に開発していたが、1回1回手動ADBコマンドにてクラス名を目視確認からのコピペは非常に効率が悪い。
以下稚拙ながらリストからアプリを選択し自動取得する方法を考えた。

//検索文字列 android.intent.action.MAIN:
//NoxPlayerのインストール位置(標準インストールであれば変更の必要なし)
Nox = "C:\Program Files (x86)\Nox\bin"
ARY = ""

//直接変数に代入するとおかしくなるためtxtに出力 -- ①
DOSCMD(COPY(Nox,1,2) + " & cd " + Nox + " & nox_adb shell pm list package > " + GET_CUR_DIR + "\List.txt")
//出力txtからパッケージの一覧を作成する
RD = FOPEN(GET_CUR_DIR + "\List.txt",F_READ)
 For i = 1 To FGET(RD,-1)
  if !(FGET(RD,i) = "") then ARY = ARY + REPLACE(FGET(RD,i),"package:","") + "<#CR>"
 Next
FCLOSE(RD)
ARY = SPLIT(ARY,"<#CR>")
QSORT(ARY)

//クラス名を取得したいパッケージの選択
package = SLCTBOX(SLCT_CMB + SLCT_STR,0,"起動したいアプリケーションを選択して下さい",ARY)
if !(package = -1)
 //①と同様に
 DOSCMD(COPY(Nox,1,2) + " & cd " + Nox + " & nox_adb shell pm dump " + package + " > " + GET_CUR_DIR + "\Clss.txt")
 RD = FOPEN(GET_CUR_DIR + "\Clss.txt",F_READ)
  Clss = FGET(RD,-2)
  Clss = COPY(Clss,POS("android.intent.action.MAIN:",Clss),LENGTH(FGET(RD,-2)))
  Clss = BETWEENSTR(Clss,package,"<#CR>")
  Clss = COPY(Clss,2,LENGTH(Clss))
 FCLOSE(RD)
 
 //クリップボードにパッケージ名・クラス名を格納
 MSGBOX("パッケージ名/クラス名<#CR>" + package + "/" + Clss + "<#CR><#CR>OKを押すと起動します。")
 sendstr(0,package + "/" + Clss)
 
 //NoxPlayer内でアプリを起動する
 DOSCMD(COPY(Nox,1,2) + " & cd " + Nox + " & nox_adb shell am start -a android.intent.action.VIEW -n " + package + "/" + Clss)
endif
//あとしまつ
DOSCMD("del " + GET_CUR_DIR + "\List.txt")
DOSCMD("del " + GET_CUR_DIR + "\Clss.txt")

実行すると以下のようにインストールされているアプリケーションの一覧が表示されるので選択する。

無題

画像1

アプリケーションのパッケージ名に関してはPlayストアを確認してください。
当ソースの動作はNox Playerが起動していることが前提です。



この記事が気に入ったらサポートをしてみませんか?