從 Android 裝置自動區分 SailfishOS+Alien Dalvik 的指令

從 Android 裝置自動區分 SailfishOS+Alien Dalvik 的指令

EDIT0:我有 3 部智慧型手機:

一部配備 SailfishOS v3 + Alien Dalvik 的 Jolla1 智慧型手機和 2 支 Android 智慧型手機。

我希望能夠用 shell 語言區分它們:

在我的 Jolla1 Linux 上:

$ uname -s
Linux
$ getprop ro.build.version.release
4.1.2
$ uname -a 
Linux myJolla1 3.4.108.20190506.1 #1 SMP PREEMPT Wed Oct 9 18:24:45 UTC 2019 armv7l armv7l armv7l GNU/Linux

在我的第一部 Android 智慧型手機上,透過adb shell

shell@hlteatt:/ $ getprop ro.build.version.release
5.0
shell@hlteatt:/ $ uname -s
/system/bin/sh: uname: not found
127|shell@hlteatt:/ $ uname -a
/system/bin/sh: uname: not found

在我的第二部 Android 智慧型手機上,透過adb shell

BV9500Pro:/ $ uname -s
Linux
BV9500Pro:/ $ getprop ro.build.version.release
8.1.0
BV9500Pro:/ $ uname -a                                                                                                                             
Linux localhost 4.4.95 #9 SMP PREEMPT Wed Mar 20 18:03:34 CST 2019 aarch64

我嘗試了這個,但是兩個設備都有該getprop工具,所以這不起作用:

getprop 2>/dev/null | grep -q ro.build.version.release && export osFamily=Android || export osFamily=$(uname -s)

順便提一句 :旗魚作業系統是一個真正的Linux,基於Linux核心+Mer專案軟體分發(最後一個是從已停產的米戈Linux 發行版)

答案1

您可以從中得到三種不同的回應uname -m並加以利用。

我們期望設備發出不帶 的故障響應uname,但我們會抑制錯誤並將空響應作為我們的指示符。

case "$(uname -m 2>/dev/null)" in
  (armv7l)  DEVICE=Jolla ;;
  (aarch64) DEVICE=Android1 ;;
  ("")      DEVICE=Android2 ;;
  (*)       DEVICE=UNKNOWN ;;
esac

雖然我們可以參考軟體版本號,但當/如果作業系統更新時,這些版本號很可能會改變。在您目前的情況下,使用硬體資訊更可靠,但如果您獲得更多共享相同硬體架構的設備,則會引發誤報。

答案2

另一種方法可能是在所有 Android 裝置上安裝 bash(例如 Termux 應用程式)並讓腳本測試OSTYPEbash 變數:

一台 android 8.1 設備,OSTYPEbash 變數等於linux-android(請參閱下面的螢幕截圖)

因此,區分的命令將是:

echo $OSTYPE | grep -q android && export osFamily=Android || export osFamily=$(uname -s)

在此輸入影像描述

相關內容