Windows11 23H2にUPDATEできなくなった件

弊方の中古購入した富士通ESPRIMO Q556/R にて突然以下のような表示がでるようになりました。

Windows11 22H2 の期限迫っていることは理解しましたが、更新プログラムのチェック を押しても自動アップデートに進みません。別の Windows11のPCは、このようなことは無く、23H2 に勝手に更新されていました。 ナゼでしょう?

一先ずWindows11 22H2 のインストーラをダウンロードして実行してびっくりです。

現状を再確認します。23H2より Core i7-7700 がNGになったのでしょうか?

要件を再確認すると、Windows11 当初よりCore i7-7700 は非対応です。はてな?

あっ CPU換装したのを思い起こしました。元々はCorei 3-7100T でした。しかしコレが Windows11 の対象になっているかというと、、、

ネットを調べると、インストーラの CPU型番チェックの.dll を無効にして、インストールする方法があるようですね。業販だったので安心していたのですが、この方法で構築されたPCだったのかもしれません。これは想定外、開発環境も作り込んでいるので困った事態です。同じように困っている方もたくさんいらっしゃるんでしょうね、、、、

とはいうものの弊方も一度試してみます。appraiserrs.dll の中を空にした場合、普通に考えるとダイナミックリンク先のAPIが無いと何もカードしていないとアプリは異常終了します。Windows11のインストーラはdllを明示的ロードしてNGの場合 (LoadLibrary() APIで可能)をして、意図的にCPUチェックをスルーするロジックになっているといえます。 しかし、、、

考察するに、

  • 既にWindows11がインストールされているPCでは「appraiserrs.dll の中を空方式」 は、OS側がCPUチェックするため通用しない

とすると大型アップデート時は、毎回クリーンインストールが必要になりますね。これは大変だ。

RS232C付きの小型PCは貴重です。対策は考え中です。

Nordic UART転送速度調査1: nRF52840 と Android端末間編

前回nRF52840 と Android端末間で、Nordic UARTの基本的な送受信を行いました。次にどのくらい実際に通信量を流せるか試します。Bluetooth5での公称通信速度は 2Mbps です。実際にそんなに出るわけありません。昔々、有線TCP/IPでも実効転送速度は一割でシステム設計するよう叩き込まれたものです。

BTマスターハードウェアnRF52840-DK
BTマスターVersion5.4
BTマスターIDESEGGER5.6 (デバッガ有効)
BTスレーブモトローラG32, 2.4Gz x 4 coe
BTスレーブVersion5.2
BTスレーブIDEAndroidSdtio 4.0 (デバッガ有効)
IDE用PC Windows10, Core i7 3.8GHz x 8 coe

通信方向マスタ → スレーブ
通信周期3 sec
1セットの通信量2,000 byte
通信1セットのパケット分割数8回
パケットサイズ244
パケット間隔スレーブ内で BLE_NUS_EVT_TX_RDY:次送信許可 イベント発生後、即時。

シーケンス全体:

パケット間シーケンス:

スレーブ側で以下の計算を行い秒辺りの送信バイト数を画面表示する。

( 通信1セットの終了開始時刻(sec) - 通信1セットの受信開始時刻(sec) ) ÷ 通信1セットの受信Byte数

2MBpsで、1byte=10bit仮定し、200kbyte/秒すると、性能の1%しか達成していない。

少し予想はしていましたが、なぜこのような結果となるのでしょう? 引続き調査をしていきます。

横河オシロスコープDLM2024の導入memo

これまで弊方の開発では本気のオシロまでは必要ないかなと思いPCオシロ POS-4 を使用していました。一応4chで出先でも扱いやすい、日本製だし、低速のシリアル通信なら十分見れます。

しかし高速のシリアル通信やクロックの確認は難しいです。 そこで横河DLM2024を導入にした覚書です。10年前くらいのモデルです。もっと古いDL1740でもフルカラーだし十分ですがフロッピーはつらいです。オプションでロジアナ、オプション無でシリアル通信のByte変換解析(少し怪しい)があります。CAN解析もできるらしいですがオプションが必要かは不明です。

購入はメーカリース会社さんのリースアップ品です。丁寧に使用されていて、近々で校正ずみ、付属品もそろっていて半年保障ありです。中古計測器屋さんやヤフオクでも同じくらいの値段だったのでこの方が効率的かと思います。

ロギングも可能なDL750 + 波形モジュール4ch でも+数万円 でしたので悩みどころでしたが、持ち運びする場合を考慮してコンパクトな方にしました。

まずプローブ未接続で起動してみます。このモデルは初期状態が波形太く光るモードです。(用途は分かりません。後で波形フォーマットを変更します。)

機器スペックを表示してみます。

イーサがあるのでネットワークを設定します。本体でUtility -> NetWork -> TCP/IP から設定します。デフォルトはDHCPなので、OFFして固定IPを設定し、ping確認します。設定を反映するには本体を再起動が必要です。

続いて波形画像を取り出すため FTP 設定を本体で行います。FTP は FFFTP を使用します。本体への接続手順は以下のとおりです。本体側デフォルトユーザ設定は anoymous (パスワードは不要) です。

ブラウザからの波形表示もサポートされていましたが、Flash Player で作られており、現在のブラウザでは使用禁止のため以下のようになります。本体でWEB表示設定はOFFしておきます。(インターネットは介さないのでHyper-Vなど仮想環境からWindows7等からなら見れるかもしれません ) Ruffleという代替えプラグインもあるようです。(今度試す)

お試しでCAN生波形をみてみます。初期状態だとなぜか波形トレースがかかっており、一旦トレースクリアをします。波形がなまっているのでレコードレングスを4ch時の最大1.25Mにします。波形フォーマットも何故か破線設定になっているので、曲線か直線に変更します。

以上で、DLM2024 の導入が完了しました。電子コントローラの開発現場でも、トリガーくらいでオシロの機能を使いこなせていない場面もよく見受けられます。そのた機能の使い方もレポートしていきたいと思います。

Xperia Z4 TabletでFullバックアップを試す

セットアップ済み端末から、.ftf を再生成できればもしかすると… 気になって試してみたメモです。わかっていたことですが、root化できないとダメみたいです。

以下メニューがそれを示すのでしょうか? “Root access denid(拒否)“となりダメでした。

検索すると “Backup-TA” なるツールが見つかります。2010年代前半と古いものです。SUコマンド がないとダメでした。(しかしよくよくみると当ツールは Flash Tool に含まれているようです)

root化で検索すると “EASY Rooting Toolkit” が見つかります。これはソースコードだけでした。Android StduioNDK を追加し、make をかけます。コードが古く、#include漏れ、変数型不足、prototype宣言不足だらけでかなり修正しましたが Build できました。adb /data/local/tmp に転送し、実行しても無反応でした。(しかしよくよくみると当ツールは Flash Tool に含まれているようです)

これも実行ファイル、スクリプト、Superuser.apk 等を、adb /data/local/tmp に転送し実行するものでした。BusyBox(バイナリ結合コマンド)も転送しているので、bootバイナリにroot権限を埋込しそうです。しかし動作しますが成果は無しです。

あと実行するとウイルス検知されます。ヤバいやつです。


バックアップから .ftf 生成するには、root化が肝のようです。XDAで最新の手法を見ると、

  • boot loader をunlock
  • .ftf から .sin を展開し、boot.img を取出し。
  • Andeoid 上で、magisk のapkをインストール後、boot.img にroot権限を付与。
  • fastboot flash boot で、boot.img を書き込み。

実施するには実験用の SGP771 か SGP712 が必要ですね。

Javaと組込み機器Cで通信するときの留意事項

AndroidアプリなどJava言語と、組込み機器C言語で通信させるとき、せちがらい制約があります。その制約と対応方法の覚書です。

古くはVB6(VBA)C#Switf には構造体はありますが Java だけなんで?て感じです。Java側でByte配列へ編集もしくは分解するしかないようです。以下事例です。

組込み側

///  BTスレーブ要求フレーム ///
typedef struct _ST_SLAVE_REQ {
  uint8_t		head[ 4 ];	// HERAER兼パケット識別
 	uint16_t	len;		    // パケット長
 	uint16_t	req;		    // 要求コード
  uint8_t		foot[ 4 ];	// FOOTER
 	uint16_t	csum;		    // CHECKUSUM
} ST_SLAVE_REQ;
// Memo: 実際にはCPUアーキテクチャによってパウンダリ調整なし、2byte調整、4byte調整があるのでよく確認します。

Java側 :

///  BTスレーブ要求フレーム ///
short   frmLen = 14;
byte[]  buff = new byte[frmLen];

copyBytes(buff, 0, appCom.ID_SLAVE, 4 );          // 4: HERAER兼パケット識別
copyBin16(buff, 4, frmLen );            	        // 2: パケット長
copyBin16(buff, 6, appCom.REQ_START_MONITER );  	// 2: 要求コード
copyBytes(buff, 8, appCom.ID_TAIL, 4 );           // 4: HERAER兼パケット識別
short   csum = checksum(buff, frmLen - 2);        // Checksum
copyBin16(buff, 12, csum );            	           // 2: Checksum

Bundle arg = new Bundle();
arg.putByteArray( "BINARY",  buff );     // BIN DATA

WriteValueBLE( mServiceCANonNUS, mMessengerCANonNUS, arg );

byteコピー などはメソッドを追加します。web検索すると Unsafe.copyMemory なるものがでてきますが作った方が早い!

    ///////////////////////////////////////////////////
    // Byteコピー
    ///////////////////////////////////////////////////
    public boolean copyBytes(
        byte[]  to,
        int     offset,
        byte[]  from,
        int     len
    ) {
        if ( from.length < len ) {  // ちゃんと実体sizeをちぇっくしましょう。
            return false;
        }

        if ( to.length - offset < len ) {
            return false;
        }

        for( int i = 0; i < len; i ++ ) {
            to[ i + offset ] =  from[ i ];
        }
        return true;
    }

unit16変換関数を作ります。バイトオーダーは組込み機器側のCPUアーキテクチャに合せます。

///////////////////////////////////////////////////
// int16コピー
///////////////////////////////////////////////////
public boolean copyBin16(
    byte[]  to,
    int     offset,
    short   from
) {
    if ( to.length - offset < 2) {
        return false;
    }

    // ARMはリトルエンディアン
    to[ 0 + offset ] =  (byte)( from % 256 );
    to[ 1 + offset ] =  (byte)( from / 256 );
    return true;
 }


似たような言語では、C#はあり、Switf は無いようです。 (アプリだけ作ってる方々は、組込み機器ではsignedを基本使わないこと自体あまり知られていないのかもしれませんが…)

以下の場合、Java側で正しい値になりません。以下例では、frm.len は 4002( 0x9C42) となり、Java側で 0x9C がUnder Flow し -100 となります。そのまま extractBin16 で加算されると66 (0x42) + -100 * 256 = -25,534 と全く異なる値になってしまいます。

組込み側:

///  BTスレーブ応答フレーム ///
typedef struct _ST_SLAVE_RESP {
		uint16_t	len;		         // パケット長 6
    uint8_t    data[40000];    // CAN DATA部
} ST_SLAVE_RESP;

		:
	前略
		:
ST_SLAVE_RESP frm;

frm.len = sizeof(ST_SLAVE_RESP) - sizeof( uint16_t );	// パケット長 ,checksum分引く = 40,002(0x9C42)
		:
	中略
		:
 err_code = ble_nus_data_send( /*in*/    &m_nus,
			 						  /*in*/     &frm,
			  					  /*in-out*/ &sendLen,
									  /*in*/     m_conn_handle );

Java側:

/// BLEデータの取出し
byte alldata[] = characteristic.getValue();

// パケット長 6
short len = extractBin16(alldata, 4);
		:
	中略
		:

///////////////////////////////////////////////////
// int16取り出し
///////////////////////////////////////////////////
public short extractBin16(
    byte[]  from,
    int     offset
) {
    short   val  = 0;
    short    tmp;

    // QualcommはARM系なのでリトルエンディアン、Nordic もARM系なのでリトルエンディアン
    val  +=  from[ 0 + offset ];            // 0x42 → 10進 66
    val  +=  ( from[ 1 + offset ] * 256 );  // 0x9C → 10進 -100

    return val;
}

修正例は以下のとおりです。これは VB6(VBA) も同様で昔はよく引っ掛かっていたものです。

///////////////////////////////////////////////////
// int16取り出し
///////////////////////////////////////////////////
public short extractBin16(
    byte[]  from,
    int     offset
) {
    short   val  = 0;
    short    tmp;

    // ARMはリトルエンディアン
    tmp  =  from[ 0 + offset ];
    if ( tmp < 0 ) {    // Javaはunsignedがないため、1の補数で補完する
        tmp = (short)(255 + tmp + 1);
    }
    val  +=  tmp;

    tmp  =  from[ 1 + offset ];
    if ( tmp < 0 ) {    // Javaはunsignedがないため、1の補数で補完する
        tmp = (short)(255 + tmp + 1);
    }
    val  +=  ( tmp * 256 );

    return val;
}

チエックサム計算も同様にくるってしまいます。尚、shortがオーバーフローしたとき、プログラム異常になってしまうのかわかりませんが対策しておきます。

組込み側:

uint16_t CalcCheckSum(
 	 uint8_t *buf, 	// i : 対象Buffer
	 int16_t len	  // i : 対象Buffer長。
) {
	uint16_t i;
	uint16_t sum;

	sum = 0;
	for( i = 0; i < len; i ++ ) {
		sum += buf[ i ];
	}
	return	sum;
}

Java側:

 ///////////////////////////////////////////////////
 // checksum
 ///////////////////////////////////////////////////
 public short checksum(
     byte[]  to,
     int     len
 ) {
     long    sum = 0;
     short    tmp;

     for( int i = 0; i < len; i ++ ) {
         tmp = (short)to[ i ] ;
         if ( tmp < 0 ) {    // Javaはunsignedがないため補完する
             tmp = (short)(255 + tmp + 1);
         }
         sum += tmp ;
     }

     return((short)sum);
 }


組込みC側と送受信する文字列は、Stringでは渡せないです。copyValueOf(char[] data)、valueOf(char[] data) があるようですがコードもかさむんで、Byte[] でよいでしょう。

    final byte[]  ID_MASTER = {0x42,0x54,0x30,0x32};   // "BT02" MASTERから
    final byte[]  ID_TAIL   = {0x42,0x45,0x4E,0x44};   // "BEND"	 終了

SGP312:Xperia Tablet Z Wi-Fi 32GB版をAndroid 13相当にSetupする

ユーザさんから問合せがあり、Xperia Tablet Z Wi-Fi版 (SGP312) のSetupを実施した結果です。要点/固有事項だけ記載いたします。フル手順はSO-05Gの記事をみてください。


まずXperia Tablet Zのモデル展開状況を確認します。

仕様型番通称
Wi-Fi、16GBSGP311pollux_windy
Wi-Fi、32GBSGP312【今回】pollux_windy
4G、32GBSGP321pollux


LEDの位置

Xperia共通の fastbootモード時に青、flashモード時に緑に点灯するLEDはディスプレイ中央上でなく、ボディサイドにあります。何も光らないので最初は困惑します。


  • やや動作はもっさり。
  • Setup後、UPボタン + 電源on でのリカバリ起動はできません。


各種用意するツールやROMデータは公開状況が日々変化します。当方は以下の構成で行いました。当方から配布はできないため、くぐって入手してください。https://androidfilehost.com/が主な入手先です。

書換用Windowsアプリflashtool-0.9.36.0-windows.exeWindows用書込みソフトのインストーラです。GUIアプリ、Xperia用USBドライバ、CUIコマンドを含んでいます。
root化イメージ不要xperiaはroot化不要。
bootイメージ適用不可
カスタムリカバリtwrp-3.7.0_9-0-pollux_windy.imgboot領域に書込む。
OSイメージlineage-20.0-20231125-UNOFFICIAL-pollux_windy.zipAndroid13互換
OpenGappMindTheGapps-13.0.0-arm-20231025_200806_Z-Tab.zipSM_T800と同様に、オリジナルからスクリプトの修正が必要。


オリジナルは And 5.1.1 でした。


手順は他Wi-Fi系 Xperia と同じです。Bootloader unlock allowedIMEI を確認するためのサービスコードの入力方法は、連絡先 -> 設定 から 画面下部を長押します。

ポイントとなる Bootloader unlock allowed の状態は Yes でした。

Bootloader unlockするための解除コードの発行するSONY Unlock Bootloader サイトで選択するDevice名は WiFiと 4G は別々になっています。もちろんWiFi側を選びます。

Bootloader unlockは、fastboot コマンドで行います。

再びサービスコードを入力し、Bootloader unlockされたか確認します。


通常どおり、recovery領域に TWRP*.img、boot領域にセットアップ対象のOSから取出した boot.img を書き込んでも TWRP が起動しません。念のため容量が同じSPG321のboot.img もNGでした。

海外のWeb記事によるとこの方法でうまく行くようです。もしかすると SGP311SGP312 でメモリレイアウトが違い、通常OSは 16GB版のSGP311 に合わせてあるのかもしれません。SGP611 と同様に boot領域 に TWRP*.img を書込みます。以下、Boot領域から TWRP を起動した様子です。


lineage-20.0*.zip をSDカードにコピーして、TRWPからインストールします。ここは特に問題なしです。コンソールメッセージを見るとOSは 16GB版SGP311 用にジェネレーションされたもののようです。

一先ず起動はOKです。WiFi、BT、カメラ、SDカード、GPS( GPSTestアプリは古いためか無反応だったがGoogleMAPはOK ) は一通りはOKでした。

しかし、ホームボタン、戻るボタン が表示されません。

これはOS初期セットアップで以下の指定する必要がありました。Samsungなどハードボタンがある機種を自動識別しないようです。

ホームボタン、戻るボタンが表示されるようになりましたが、純正OSと違い右寄せに小さく表示されます。

またOSバージョン新しくなる他、画面分割が使えるようになるメリットがあります。

しかし 本端末の場合、少し処理負荷が高いようで、ややもっさり感があります。


TWRPから lineageOS用のGoogleサービス: MindGappをインストールしましたがエラーになってしまいます。原因は SM-T800と同様です。尚、TWRP を boot領域 に書込んでいるため、LinageOS と MindGapp は一回のTWRP の起動でインストールする必要があります。

SM-T800と同様にスクリプトを修正して、新しいzipを作りインストールします。本zipは、GitHubに公開済みです。

この後、Googleサービスを自動updateさせれば、追加インストール無くGoogleサービスが利用可能になりました。今日時点での各バージョンは以下のとおりでした。

アプリ名バージョン
Google検索13.21
Google Play45.1.12
Google Play開発者サービス25.8.32

他の基本アプリは、And12以降のGoogleアプリのオープン版 NikGapps は 32bit版が無いためインストールできませんでした。取り急ぎGoogle MAPは、Google Playから通常インストールし問題なく動作しました。


以上、SGP312:Z Tablet Wi-Fi 32GB版をAndoroid13相当にUpdateする手順です。しかしながら自分でやるのはメンドクサイ、忙しい、自身が無い方は、弊方でセットアップをお受けいたします。約1.5時間の個人様向け工数+事務費で税込4,000円 。ご相談、依頼はこちらから。

nRF52840 と Android端末間で Nordic UARTを試す

前回nRF52840の開発環境を作りました。今回はAndroid端末間で Nordic UARTを試します。構想中のCANロガーのWANとの中継部になります。

弊方のBluetooh実績は以下の通りです。うまく組合せればスピーディに構築できるでしょうか?

  • nRF5810 nRF5832 間で、オリジナル基板にてNordic UART 通信。
  • Android端末から、体温計(A&D製と日本精密計測製)、血圧系(A&D製)、血中酸素濃度系(A&D製)

大抵最初はサンプルコードに肉付けするか、ある程度の部分をごっそり持ってるかです。弊方には体温計等用に 独立スレッドのインテントサービスライブラリを作ってあり、こちらを有効活用したい。まず通信仕様を確認します。

前回Nordic マイコン同士の通信では、プロトコルがカプセル化されていて見えません。Android用専用ライブラリも無いようです。Nordicドキュメントをみても通信仕様書らしきものは見当たりません。サンプルコードを読解くしかないようです。サンプルコードあまりな無く、Android-nRF-ToolboxAndroid-nRF-UART というのがありGitHubに置いてあります。(後者は有志の方のものかも)

Nordic UART の通信条件は以下のとおりでした。e) は .h に明確な記載はなかったため BLE_NUS_MAX_DATA_LEN をデバッグターミナルに printしてみました。

a) Service UUID 6e400001-b5a3-f393-e0a9-e50e24dcca9e
b) 受信用特性UID6e400003-b5a3-f393-e0a9-e50e24dcca9e
c) 送信用特性UID6e400002-b5a3-f393-e0a9-e50e24dcca9e
d) GATT UUID (従来通り)00002902-0000-1000-8000-00805f9b34fb
e) 一回の送信最大Byte Size (実験値)224

尚、マスターは Nordic 側、スレーブは Android 側としています。

今のところ Nordic UART に固有に依存した通信は無く、体温計等と同じシーケンスで送受信できました。ポイントを列挙します。

  • 受信だけなら受信用特性だけ使えばOK。BT接続後、相手BT機器からデータを投げてくる場合と同じです。
  • 送信は送信用特性に対して書き込みを行います。相手BT機器に対して何か設定を行う場合と同じです。
  • 時刻特性(00002A08-0000-1000-8000-00805f9b34fb) はBT共通ですが対応しいないようです。エラーになります。 Nordic 側で自分で作り込む必要があるのかもしれません。

以下テスト送信の様子です。

nRF52840 側は、SEGGER のデバッグコンソールで確認します。

Nordic 側のコードは以下のような感じです。”test”受信後、”test_ok”を送信します。

Android側の送信トリガー部は以下のような感じです。

Android側の受信表層部は以下のような感じです。

Android側の送信深層部は以下のような感じです。ここに至るまでは、インテントサービスによるメッセージと、GATT のイベントハンドラを数段介しています。

取り急ぎ体温計等と同じシーケンスで使えそうな印象です。本実装では特定時間内の複数CANフレーム一式をまとめて受信する予定です。以下が次課題です。

  • 複数CANフレーム一式のパケット分割。(これはやればできるハナシ )
  • 時間当たりの転送効率がどのくらいでるか?
  • 転送効率が芳しくない場合、他のBT プロファイルが使えないか? ( BLE: lowenergy でないBluetoothだともっと早いとどこかで見た気がする)
  • Bluetooth Long Range も気になる。(nRF52840 の機能マトリクスにはサポート有と記載があった)


nRF52840 と Android端末間で Nordic UARTを試すした結果です。何かしらベースがあれば割と簡単に通信できます。( 当方は扱い方を思出すのに一番時間を要しました)

手順とそのポイントは以上ですが、Nordic UART をAndriod端末から直ぐに動かしたい、工数がない、自身がない会社さん等はご依頼を受付けています。こちらまでご一報ください

ゆうぱっくスマホ割の注意点

ヤマト営業所ゆり郵便局の数の方が多いのと、安く送れるので、カスタムROMセットアップでよく利用しています。しかし独特の癖があります。その覚書です。

間違っていないのにログインできない

メアド と パスワード 合っていても、高い確率で不一致で蹴られます。

弊方では、端末を直接操作するのは非効率なので scrcpy にて PC からエミュレート操作しています。そのとき メアド と パスワード はコピペします。3回間違えるとログイン不能になるので、毎回パスワードを再設定しています。 scrcpy かコピペのどちらかがまずそうです。

郵料金を確認するため仮入力後再開するとき

  • 以下のように履歴を表示します。(これも直感的に連想しにくい…ずっと再入力していた)

郵便局留め発送時

  • アプリから送付先への受取住所の入力は、郵便局からではなく、端末の発送者のメールから送信される。(郵便局から案内するのが普通なような…)
  • 送付先さんが受取住所の入力後、自動メール連絡は無い。(普通はあるかな…) 入力後か確認するには以下の操作をします。(気づきにくい)

QRタグはキャプチャできない

常時、端末にsimを指しておらず、郵便局で読ませるQRタグをキャプチャして持っていこうとすると、キャプチャがNGとなります。社内wi-fi圏から離脱後、素早く郵便局で読ませる必要があります。

作成履歴が削除できない

個人情報保護に観点から履歴は削除したいのですができないです。

SGP771 ROMにワンセグTVを入れてみる

前記事ではSO-05Gに海外ROMに書換えました。ユーザさんから質問があったので調べてみました。ワンセグ、10年前はよく耳にしたコトバですが、ネットTVがたくさんある中、衰退気味のようですが未だ現存しているようです。小生はワンセグ全盛当時から SC-02D か Xperia SIMフリー を使っていたため、観たこともなく、No眼中でした。たぶん開発費/型費/生産/在庫管理の費用対効果から、ハードウェアとドライバ部は共通ではないかと思いますので、アプリをインストールできれば使えるかもしれません。

SO-05G純正ROMに入っていたテレビアプリはいませんね。Google TV というのがはいってますが、ただのネットTVのメニューでした。

汎用のワンセグTVアプリは存在しないようです。Google Playで 地上波テレビ 視聴、ワンセグ 地デジ リアルタイム配信 なるものがありますが使い方がわるいのか何もみれません。

SO-05G And6純正ROMに戻すには、機種をSO-05Gに戻さないといけないため直ぐにはできないです。SO-05G And7純正ROMは入手不能なので、And6純正ROMの .ftf からapkを探ってみます。

.ftf からapk展開手順は以下のとおりです。iCore7 3.5GHzのpcで30分はかかります

  1. 7zip で一次解凍
  2. system.sin を SONY flash tool のメニュー tool -> Sin Editer -> Extact data で二次解凍
  3. system.ext4 7zip で三次解凍。データのペイロード後にデータが存在します とmsgが出る場合がありますが気にしなくていいみたいです。
  4. oem.sin も上記2. 3.を実施します。
  5. 解凍フォルダを .apk で検索。

検索した結果は、

ActiveClipper.apk
album-albumLive-release.apk
android-res-305.apk
AndroidGGM-dcm-8_1.5.0-shortcut-product.apk
AnonymousData.apk
anshinmode_dummy-v002_sha1.apk
AntHalService.apk
apk_list.csv
ApnSwitcher_sha2.apk
app-smallbrowser-ed.apk
AppReport_sha1.apk
AptxNotifier.apk
ar-effect.apk
AreaMail_sha1.apk
ArtFilterCamera-xhdpi-release.apk
autogps_sha1.apk
BackupRestoreConfirmation.apk
BasicDreams.apk
Bluetooth.apk
BluetoothMidiService.apk
Books.apk
bootinfo.apk
BridgeLauncher_sha1.apk
Browser.apk
CalendarProvider.apk
CallLogBackup.apk
CameraAddonPermission-release.apk
CameraCommon.apk
CameraCommonPermission-release.apk
CameraExtensionPermission-release.apk
CameraWearableBridgeHandheldServer.apk
CaptivePortalLogin.apk
CarrierConfig.apk
CertInstaller.apk
chkapl_sha1.apk
Chrome.apk
ChromeCustomizations.apk
ClockWidgets-release.apk
CloudPrint.apk
Cloudset_sha1.apk
CloudStorageService_BM_sha1.apk
CNEService.apk
com.android.browser-res-305.apk
com.android.calendar-res-305.apk
com.android.carrierconfig-res-305.apk
com.android.email-res-305.apk
com.android.exchange-res-305.apk
com.android.incallui-res-305.apk
com.android.internal-res-305.apk
com.android.partnerbrowsercustomizations.chromeHomepage-res-305.apk
com.android.phone-res-305.apk
com.android.providers.contacts-res-305.apk
com.android.providers.partnerbookmarks-res-305.apk
com.android.providers.settings-res-305.apk
com.android.server.telecom-res-305.apk
com.android.settings-res-305.apk
com.android.systemui-res-305.apk
com.epson.mobilephone.android.epsonprintserviceplugin.apk
com.evernote.docomo.7.4.1.higherAllArch.1366.apk
com.microsoft.skydrive-res-284.apk
com.mobisystems.fileman.apk
com.nttdocomo.android.dota-res-305.apk
com.nttdocomo.android.osv-res-305.apk
com.qualcomm.location.apk
com.sony.drbd.reader.other.jp.apk
com.sony.snei.psnportal.apk
com.sony.tvsideview.phone.apk
com.sonyericsson.android.camera-res-305.apk
com.sonyericsson.android.socialphonebook-res-305.apk
com.sonyericsson.androidapp.sehome.apk
com.sonyericsson.conversations-res-305.apk
com.sonyericsson.customizedsettings-res-305.apk
com.sonyericsson.extras.liveware-res-305.apk
com.sonyericsson.home-res-305.apk
com.sonyericsson.home.apptray-res-220.apk
com.sonyericsson.infiniteview-res-305.apk
com.sonyericsson.setupwizard-res-305.apk
com.sonyericsson.simcontacts-res-305.apk
com.sonyericsson.tetherentitlementcheck-res-305.apk
com.sonyericsson.trackid-res-305.apk
com.sonyericsson.updatecenter-res-305.apk
com.sonyericsson.usbux-res-305.apk
com.sonyericsson.wappush-res-305.apk
com.sonymobile.androidapp.audiorecorder.apk
com.sonymobile.androidapp.cameraaddon.areffect-res-305.apk
com.sonymobile.androidapp.cameraaddon.arfun-res-305.apk
com.sonymobile.anondata-res-305.apk
com.sonymobile.backgrounddefocus-res-305.apk
com.sonymobile.calendar-res-305.apk
com.sonymobile.customizationselector-res-305.apk
com.sonymobile.email-res-305.apk
com.sonymobile.exchange-res-305.apk
com.sonymobile.keyboardlauncher-res-305.apk
com.sonymobile.poboxplus-res.apk
com.sonymobile.sdcardtransfer-res-305.apk
com.sonymobile.simplehome-res-305.apk
ConfigUpdater.apk
Contacts160010004_sha1.apk
ContentsHeadline_Tablet_v_6_1_0_sha2-chain.apk
Conversations.apk
CoreSettings.apk
CrashMonitor.apk
CrashMonitorSystem.apk
CredentialManagerService.apk
CustomizedSettings-release.apk
Databackup_sha1.apk
DcmAppManager_sha1.apk
DCMDOTA.apk
dcmictag-sha1.apk
DcmIpPushAggregator.apk
DCMLogAcquisition.apk
DCMSWUP.apk
dcmvoicerecognition_sha1.apk
DcmWapPushHelper.apk
dcm_location_noicon_osvfota_sha1.apk
dcm_location_sub_sha1.apk
DecoEmojiManager_nolibs_sha1.apk
DefaultContainerService.apk
DemoAppChecker.apk
device-monitor.apk
DeviceConfigTool.apk
DeviceManager-docomo-v1208-signedAF-aligned.apk
DeviceSecurityService.apk
dhome_tablet_sha1.apk
Dialer170010002_sha1.apk
dlna-somc-xhdpi-release.apk
dmapnavi_navi_dl_2081_sha1.apk
dmenu_sha1.apk
docomoAccountAuthenticator_sha1.apk
DocomoIdManager_sha1.apk
DocomoInitialization_sha1.apk
docomomail_sha1.apk
Docomoremotelock_sha1.apk
DocomoSettingsUtil.apk
docomoset_sha1.apk
Docomowipe_sha1.apk
docomo_remote_sha1.apk
DocumentsUI.apk
DownloadProvider.apk
DownloadProviderUi.apk
Drive.apk
DrmDialogs.apk
DrmLicenseService2.apk
DtcpCtrl-release.apk
DualCamera-xhdpi-release.apk
DualShockManager.apk
duidgenerator.apk
ebook-viewer0_sha1.apk
enhancedusbux.apk
EnterpriseService.apk
ExactCalculator.apk
Exchange2.apk
experienceflow2livewallpaper-release.apk
ExtendedBootLockService.apk
ExternalKeyboardJP.apk
ExternalKeyboardsInternational.apk
ExternalStorageProvider.apk
facebook-xhdpi.apk
FaceFusionCamera-xhdpi-release.apk
FaceLock.apk
fast-dormancy-wakeup.apk
fota-service.apk
framework-res.apk
FsDtvApp.apk
FusedLocation.apk
Galaxy4.apk
gmail-reader-service.apk
Gmail2.apk
GmsCore.apk
GoogleAnalyticsProxy.apk
GoogleBackupTransport.apk
GoogleCalendarSyncAdapter.apk
GoogleContactsSyncAdapter.apk
GoogleFeedback.apk
GoogleLoginService.apk
GoogleLyricsPlugin.apk
GoogleOneTimeInitializer.apk
GooglePackageInstaller.apk
GooglePartnerSetup.apk
GoogleServicesFramework.apk
GoogleTTS.apk
Hangouts.apk
HeadphoneSelection.apk
HoloSpiralWallpaper.apk
Home-Overlay-285.apk
home-release.apk
HotspotAdvancedSetting.apk
HTMLViewer.apk
HwColorTheme002-Overlay-release.apk
HwColorThemeDefault-Overlay-release.apk
IconcierContents_sha1.apk
iConcier_sha1.apk
Iengine.apk
ImageEnhancer.apk
ImageProcessorPermission-release.apk
ImeiBarcode.apk
ims.apk
InCallUI-Overlay-285-docomo-release.apk
InCallUI.apk
InputDevices.apk
IntelligentBacklight-Overlay-270-release.apk
IntelligentBacklight.apk
IntelligentObserver.apk
IntelligentRotation.apk
jp.co.canon.android.printservice.plugin.apk
jp.co.labelgate.moratouch.apk
KerberosService.apk
KeyboardHostApp.apk
KeyboardLauncher.apk
KeyChain.apk
LAC_settings_sha1.apk
Lifelog-googlePreloadLive-release-3.0.P.0.12-6291468.apk
LiveWallpapers.apk
LiveWallpapersPicker.apk
livewaremanager.apk
LockscreenSettings-release.apk
MaintenanceMenu.apk
ManagedProvisioning.apk
Maps.apk
mascot_tablet_sha1.apk
MediaPlayer_fw_mm_tab_sha1.apk
MediaProvider.apk
MmbApp_sha1.apk
MmbFcBrowMw-res.apk
MmbServiceProcess.apk
MmbSetting.apk
MmsService.apk
Music2.apk
MusicFX.apk
Newsstand.apk
NewsWeather.apk
NextbitApp_sha1.apk
NfcNci.apk
NoiseField.apk
OMAClientProvisioning-release.apk
OmaDownload.apk
OmaV1AgentDownloadServices.apk
OneTimePassLockScreenApp.apk
OnlineRemoteCamera-xhdpi-release.apk
overlay-semcexperienceflow2-300-release.apk
package-courier-release.apk
PacProcessor.apk
PartnerBookmarksProvider.apk
PhaseBeam.apk
phone-usage.apk
Phonebook-Overlay-275-docomo-release.apk
Phonebook.apk
Phonesky.apk
Photos.apk
photoslideshow-release.apk
PhotoTable.apk
PhotoViewer_Downloader_sha1.apk
PhotoWidget-release.apk
pip.apk
PlayGames.apk
playstationapp.apk
PlusOne.apk
PrintSpooler.apk
ProxyHandler.apk
qcrilmsgtunnel.apk
QtiTetherService.apk
Radio3.apk
RcaHandler.apk
RemoteAccessRegister.apk
RemoteControlService.apk
RemoteUnlockService.apk
rspermntt_somc.apk
saigaiban-3a-ver11.20.0_sha1.apk
Schedulememo_sha1.apk
ScreenLockService_sha1.apk
ScreenRecording.apk
SDCardBackup_sha1.apk
SdcardTransfer.apk
SecureClockService.apk
SemcAutoPowerOff.apk
SemcCalendar.apk
SemcCamera3D-xhdpi-release.apk
SemcCameraUI-japan-xhdpi-release.apk
SemcClock.apk
SemcCnapProvider.apk
SemcContactPicker2.3.apk
SemcContactsProvider-Overlay-295-docomo-release.apk
SemcContactsProvider.apk
SemcEmail.apk
SemcGenericUxpRes.apk
SemcMetadataCleanup.apk
SemcMusic.apk
SemcPhotoEditor.apk
SemcPowerSaveModule.apk
SemcSettings.apk
SEMCSetupWizard.apk
SemcSimDetection.apk
SemcStorageChecker.apk
SemcTelephonyProvider.apk
SemcTvOut.apk
SemcVideo.apk
SemcWarrantyTime.apk
ServiceMenu-Overlay-270-release.apk
ServiceMenu-Overlay-275-release.apk
ServiceMenu-Overlay-285-release.apk
ServiceMenu.apk
Settings.apk
SettingsProvider.apk
SetupWizard-Overlay-285-release.apk
SetupWizard.apk
SharedStorageBackup.apk
Shell.apk
SimContacts.apk
SimlockUnlockApp.apk
SimpleHome.apk
skin-core-release.apk
skin-picker-release.apk
SmallApp-Calculator-release.apk
SmallApp-Timer-release.apk
SmallAppManagerService-release.apk
SmallAppsFramework-release.apk
SmallAppsLauncher-release.apk
SmallAppWidget-release.apk
smallmovies.apk
SmartSearch.apk
sneiaccountmanager.apk
SnpVUStore.apk
socialife.apk
SocialPhonebookService_sha1.apk
SomcEnterpriseInstallationService.apk
SomcFontSelector.apk
SomcMovieCreator-release.apk
SomcMovieCreatorRmm-release.apk
SomcPhotoAnalyzer.apk
SomcPlayAnywhere.apk
SomcPOBox.apk
SomcPOBoxSkinEasy.apk
SomcPOBoxSkinGummi-xhdpi.apk
SomcPOBoxSkinStandard.apk
SomcPOBoxSkinWood.apk
SomcPodcast.apk
SomcSettings-Overlay-285-release.apk
SomcSketch-live.apk
SomcSupplementallyService.apk
SomcTelecomDataProvider.apk
SOMCWebPlatform.apk
SomcWifiDisplay.apk
SomcWifiService.apk
somc_so05g_manual.apk
sonyentrance2-release.apk
sound-picker-release.apk
SoundEnhancement.apk
SoundPhotoCamera-xhdpi-release.apk
SoundRecorder.apk
StaminaRuntimeOverlay-karin.apk
StartupFlagV2.apk
StatementService.apk
Stk.apk
StoreApp_fw_m_sha1.apk
StyleBlue-release.apk
StyleBubble-release.apk
StyleDaily-release.apk
StyleDoll-release.apk
StylePaint-release.apk
StylePortrait.apk
StyleRed-release.apk
StyleStar-release.apk
StyleSunshine-release.apk
StyleSuntan-release.apk
SuperStamina.apk
SystemUI-Overlay-285-release.apk
SystemUI.apk
Tag.apk
Tasks.apk
Telecom-Overlay-285-docomo-release.apk
Telecom.apk
TeleService-Overlay-285-docomo-release.apk
TeleService.apk
telresources.apk
TetherEntitlementCheck.apk
textinput-chn-xhdpi.apk
textinput-tng-live.apk
theme-manager-release.apk
Theme000-sw800dp-xhdpi-release.apk
Theme001-sw800dp-xhdpi-release.apk
Theme002-sw800dp-xhdpi-release.apk
Theme003-sw800dp-xhdpi-release.apk
Theme004-sw800dp-xhdpi-release.apk
Theme005-sw800dp-xhdpi-release.apk
Theme006-sw800dp-xhdpi-release.apk
Theme007-sw800dp-xhdpi-release.apk
Theme008-sw800dp-xhdpi-release.apk
TimeService.apk
TimeShiftCamera-xhdpi-release.apk
TopContactsProvider.apk
TopContactsWidget-release.apk
toruca_sha1.apk
TouchBlock.apk
TouchFilterPackageSwitchService.apk
trackid.apk
TransmitPower.apk
Twitter-5.85.0.apk
UnsupportedHeadsetNotifier.apk
UpdateCenter-release.apk
usb-mtp-backup-transport.apk
usb-mtp-factoryreset-wrapper.apk
usb-mtp-fotaupdate-wrapper.apk
usb-mtp-update-wrapper.apk
usb-mtp-vendor-extension-service.apk
UserDictionaryProvider.apk
Velvet.apk
Videos.apk
VirtualPreLoad.DCM.apk
VoiceEditor_sha2.apk
VpnDialogs.apk
WallpaperCropper.apk
wallpaperpicker-release.apk
WapPush.apk
WAPPushManager.apk
WeatherWidget-release.apk
WebViewGoogle.apk
WfdService.apk
white-balance.apk
WikipediaPluginJpn.apk
WorldClockWidget-release.apk
xperia-keyboard-dictionaries.apk
XTP.apk
YouTube.apk
YouTubeKaraokePlugin.apk
YouTubePlugin.apk

このたくさんの中から怪しいのを調べます。”tv”とつくものは、

file何か調べた結果
com.sony.tvsideview.phone.apk現存している ソニー Video & TV SideView なので除外。
FsDtvApp.apk解凍するとリソースに見たことのあるTVアイコンと fsdtv mobile android のタイトル。国内受託系独立系のソフト会社さんが作成者の模様。
SemcTvOut.apkワンセグ未対応モデルにも入ってるので除外

FsDtvApp.apk が有力ですが、確実に OEM(キャリア固有のプレインストール)アプリ でありましょう。

とりいそぎ FsDtvApp.apk をインストールして実行してみます。And6用なので警告がでますがOKします。ワンセグアプリとしてはこれが正解で、インストール自体は可能であるとは分かりました。しかし実行はやっぱりだめですね...

一般的に Window でも UNIX でも、実行ファイルは一つとは限りません。大きなアプリでは、共有ライブラリ( UNIXでは .so、Windowsでは .dll )に分割しているのが通例です。Andriodでは apk 内のアプリ本体 classes.dex の他 .odex に分割される場合もあるようです。今回アプリは以下のようになっているようです。

共有ライブラリのシンボリックリンク先の実体は以下の場所にあるようです。同類とおもわれる .so がたくさんあります。 なお lib64 側には関連 .soの配置は無いようです。

.odex にをapkに統合する技があるようです。有志の方がアプリ化されたものがあったので使わせていただいたみました。しかし何も出力されません。多分、古すぎるのでしょう。できたとしても .so の配置の課題が残ります。

上記 .so.odex は apk で配置されているのでしょうか? 含んでいないとは思いますが一応確認します。 Android platform-tools (ADB) にて、コマンドプロンプトAndrod studioターミナル から調べます。接続対象がAnd7と古いので対応する ADB を使う必要があります。詳しくはこちら。端末を開発者モードにして、adb shell で接続し、 cd コマンド と lsコマンド で端末内を調べます。

やはり .so.odex は 未配置ですね。手動でコピーすればいいのですが端末のroot化が必要になります。市場情報では、Bootloader unlock 無しでのSO-05Gのroot化は成功例は無いようです。

Setup済みの端末に .so.odex は 追加できないので、インストール前の file に追加するしかありません。試行錯誤で以下のようにするようでした。

.sin やから生成した .ext4 を UNIX上で、mount -t ext4 でマウントします。今回は WSL を使いました。Windowとシームレスに使えるので効率的です。

マウント出来たらWSL上で .so.odex は を、Windows上で .ext4 を展開したfolderから、cp -rp で手動コピーします。なおWindows上で .ext4 を展開したfolderにコピーすると、とシンボリックlinkでエラーが出るのと、 .ext4 をに逆生成する手段が見つかりません。

このあと umount し、Window上で .ext4 をが更新されていることを確認します。

.ext4 を .sin に変換するには、encode を行う必要があるのかもしれません。encode は ConvertTool (SeusEncrypt.bat/SeusDecrypt.bat)というものを使うとのこと。ここの中段あたりに張り付けてありました。 拡張子ext.outsin に手動で置き換えるようです。And 4 のころの古いWEB記事ではこの紹介がありましたが、And7あたりでは不要かもしれません。

このあと .ftf を生成します。他WEB記事に手順が書いてあると思います。とりいそぎ初回書き込みは失敗です。なんか java でエラーでてます。単純な予期しないnullみたいです。

XperiFirm を使ってD/Lした packageから .ftf を生成すると書込みエラーは解消です。しかし起動すると、、、

よく見るとエラーが出ていました。

.sin を正しく生成できていないですね。Flashtool のソースを読むと、.ext4 を tar して gzip、ヘッダ部から一部読取り端末に送信して照合しているようです。Flashtool には .sin 生成機能は無いようです。.sin から header 部の出力があるので cat で結合してみましたがNG。header と内容の整合性もありそうです。

.sin フォーマットは少し情報がありますね。RSA2048、SHA256 必要みたい。変換ツールは作れなくはなさそうです。

Xperia SIN Structure analysis · GitHub

GitHub – j4nn/sinunpack: unpack sony xperia fw sin images

flashtool の x10flasher_nativ フォルダに、bin2sin.exe というものがありますね。怪しい、、、実行してみると、、、

C:\Flashtool\x10flasher_native>bin2sin Y:\SGP771_temp\system.ext4
Syntax : bin2sin [input] [partition info, 32 digits] [type] [block size] [block spare size]

adb server version (40) doesn’t match this client (41); killing… が出るときWindows編

少し古いAndroid端末と adb 接続すると以下エラーが出る場合があります。

adb server version (40) doesn’t match this client (41); killing…

バージョンアンマッチであることは理解できるのですが、、、

まず adb こと platform-tools の古いバージョンは、Android studio の SDKマネージャからはDownloadできないみたいですね。platform-tools のサイトに行ってもDownloadリンクはない。どうも直接URLからたたくみたいです。

次は Androidバージョン と adb server version の対応表が必要です。探しましたが見つかりません。総当たりで調べます。結果は以下の通りです。

Message中の( )番号Android Versionplatform-tools Version
41—-30.0.0
41—-29.0.0
407.7.128.0.0
39—-27.0.0
39—-26.0.0

一先ず解消しました。しかしMessage中の番号は何をさしてるんでしょう???

platform-tools の配置方法は弊方では以下のようにしています。