■終了
2018/7/21 20時頃に SIM を Terrain から Gemini PDA に移しました。
以後、携帯するデバイスは Gemini PDA になり、Terrain は引退になります。
約四年間使用。思ったよりも短い付き合いになりました。
最初に使った Android デバイスで、Roott化、アプリ作成まで出来て予想以上に楽しかったです。が、お別れの時が来ました、左様なら・・・
■打ち止め、では無かった?
※ 2018/7 になりましたが、以下の状態から変わらずにフツーに使えてます!
↓下の記事で話題がでた Keyone 。直近で唯一の HKB付きスマフォ。 (GeminiPDA が出ました)
一瞬、買ってもいい気持ちになったのですが・・・ 調べてみると root を取るのが不可能らしいです。
かつ、KB の日本語入力もいろいろ問題がありそうなレビューがちらほら。
root が取れれば頑張って手直しする気にもなるのですが、それが出来ないとなると・・・一気に物欲が萎えました。
という訳で TLS1.0 打ち切り問題の続き。
Terrain のブラウザは Flash が動く Firefox バージョン45 をずっと使っていて、確かにコレは青空文庫のサイトにアクセス不可。
しかし、最新ブラウザならば Android 標準API に因らず単体で TLS1.2 を実装しているとの事・・・試しに chrome の最新バージョンを入れると、確かに青空文庫のサイトにアクセスできます。
例によって up to down で、Firefox の TLS1.2 の使えるバージョンを検証。
・48.0以下 はダメ。
・49.0.2 は TLS1.2 が使えました。
・51.0以上 になると、使っているジェスチャーアドオンが動かないので、イマイチ
という訳で Firefox 50.1.0 が良さそう。Flash はとうとう使えなくなりました、まあ仕方ないです・・・その代わり バージョン45 より起動はめちゃ早いです。
この状態で7月まで様子見。 Terrain は未だ頑張れるかも!?
この関連か分かりませんが、6月に以下が使えなくなっています。
・読書尚友 Free (青空文庫ビューア)のダウンロード
・amazon video
・amazon music
<おまけ>
最近、google play 開発者サービス が大きくなって、ストレージを圧迫するようになってきた。こいつは PlayStore の更新を止めていても勝手に自動更新されます。
ストレージ圧迫されると、Terrain の調子が目に見えて悪くなる・・・
試しに LINK2SD で、SD に追い出したら調子良くなった。
リンク作成中にエラーが出る事が有りますが、リトライすれば問題無く全て追い出せます。
■打ち止め
恐らく Terrain の最終記事です。
最近になって 読書尚友 Free (青空文庫ビューア) から、書庫をダウンロード出来ない事に気付きました。
原因は(多分)青空文庫の aozora.gr.jp のサーバーが TLS 1.0 を無効化した為。
TLS1.1/1.2 の API をサポートするのは android 4.1〜、Terrain の Android4.0.3 については、どうあがいても青空文庫サーバーから直接ダウンロードすることは出来ない。更に言えばブラウザで青空文庫のサイトを開く事すら出来ない。
大手のサーバーは軒並み 2018年6月末 をめどに TLS 1.0 を無効化する見込みらしい・・・
という訳で、Terrain の限界が予想よりも早く来てしまいました。
次は Keyone 位しか無いなぁ、非常に使いにくそうだけど。
んー、[es]は8年も使ったのに、Terrain は4年使えなかった・・・まだ暫くは使い続けると思いますが、この記事が最終となるでしょう。であであ・・・
■Lolipop(5.0)以降で通知アイコンに色を付ける
Terrain には全く関係ない、一般的記事です。
EcoCtlを修正して、通知領域のアイコンで状態を分かる様に修正中。Android5.0でテストしたら通知アイコンが真っ白になって判別不能。
何なんだろうと思って調べたら、Lolipop(5.0)以降では OS の仕様でアイコンが白くなってしまう様です。
さて、ちょっと前に修正した BKlightCtl は通知アイコンの色で明るさ設定を判別するようにしたが・・・こいつは Lolipop(5.0)でもちゃんと色が付いている。
全く同じアイコンを使ってみても、EcoCtl は色が付かず、BKlightCtl は色が付く!?
↓エミュレータ画面、Terrainって名前だけど、Android6.0です。左は赤くて、右が白い・・・
いろいろ試したところ AndroidManifest.xml の android:targetSdkVersion を 20以下にすると色を残せる様です。
もちろんその場合、21 以降の API は使えません。参考までに。
ちなみに、Terrain はまだメイン機で使ってます。EcoCtl の修正は Terrain で Amazonミュージックを使う為の修正です。
■マルチタップランチャー
その昔 [es] 用に 3Clicks というアプリが有り、ダブルクリック、トリプルクリックに操作を割り当てられました。
Android ではキーフック出来ないので諦めていましたが・・・HOMEアプリにするとHOMEタップが拾える! と言うことで Android版マルチタップランチャーです。 こいつの登録数に制限はありません。
Multi Launcher
初め、Multilauncher V2 を少し手直ししたら、メインの処理はすぐ出来たので「簡単」と思ったのですが。その後の細かい部分で地獄の泥沼が待っていました。大したこと無いように見えると思いますが、Android の謎の制限、画面スタックの勝手な制御、等の為に、追加処理がてんこ盛りです。Android5.0 以上で試すと、更に動かず。またまた余計な処理が必要になりました。サンプル動画は Terrain ですが Android5.0 以上では動画みたいに画面が透けません。Android が裏で余計なことをする為です。どうしようもないです。
Terrain ならば「HOMEタップ→ハードキー押下」の操作で全キーに割り当て、と言う機能追加も可能ですが・・・
設定画面を作るのも面倒だし、要望する人も殆どいないと思うので見送り。強い要望があれば対応しても良いです。
■PCとのファイル交換
久しぶりの更新。Terrain 固有の記事ではありませんが、root化デバイスが対象です。
PCとファイル交換をする場合、普通は USB で繋いで、MTP/mass storage のモードに切り替えます。1つのファイルだけを処理したい時等そこそこ面倒です。
WiFi 経由で接続して、PC側のエクスプローラに android のストレージを表示できればラクそう。調べると、android をファイルサーバにする必要があり、面倒そうなので一時保留 →最近になって再トライしてみたところ予想よりもずっと簡単に出来ました。
Samba Filesharing for Android (要root)
基本的に、↑これをインストールするだけです。↓初期起動画面。
右下のメニューから、設定画面を呼び出せます。
Username と Password で、PCから接続するときの認証情報を設定。Workgroup Name は設定不要。
NETBIOS Name で PCから見た android のサーバ名を設定。
・Unix Extensions : PC でのみ接続する場合はは不要。
・No local Master Browser : android が local Master Browser にならないようにする。
・Screen Wake Lock : Samba Filesharing が前面にいる時に、画面がロックしないようにする。
・Wifi Wake Lock : WiFi の速度が抑制されるのを防止。
・Multicast Lock : NETBIOS Name を使用する場合はチェック要。
起動画面の「samba」のタイトルをタップすると、有効になります。↓は Wifi 接続していない状態。
Wifi 接続すると、接続を検知して、下記の画面になる。表示されている IPアドレスか、NETBIOS Name で接続できます。(WiFi切断すると前の画面に戻ります。)
同じ Wifi に繋いでいる PC のエクスプローラから \\Terrain を入力すると認証画面が出ます。
サーバ名\Username / Password を入力(Username だけを入れると、Win7 は認証情報を永続的に記憶してくれません)。
エクスプローラに Terrain のストレージが表示されました。もちろん全てのファイル操作が可能です。
PC から接続中も、ストレージがアンマウントされる事はありません、PC、android 両方からファイル操作可能。また、MTP と違ってファイル更新日も分かるのが有り難い。
ただし処理速度は遅いです。転送速度は USB の半分程度。またファイル一覧の更新処理が遅い為か? 転送するファイル数が増えるほど遅くなります。
このままでも十分に使えますが、、、この先は、こんな事もできます的お話し。
Samba Filesharing を Enable にしておけば、Wifi の接続状態を見て自動起動・停止します。ただ、この場合、Wifi 接続中は必ず起動中になってしまいます。
使うときだけ起動しようとすると、WiFi接続 → Samba Filesharing を開く → 手動Enable、の3ステップが必要。
これを1ステップで出来るようにしてみます。
@Wifi の接続状態による自動起動・停止を止める
アイコン(リソースファイル)差替 の記事のやり方で、AndroidManifest.xml (以下)を取り出し。
<action android:name="android.net.wifi.STATE_CHANGE"/> を削除して、apkを再構成しインストール。自動起動・停止が止まります。
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.funkyfresh.samba">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:configChanges="keyboardHidden|orientation" android:label="@string/app_name" android:name=".samba" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:configChanges="keyboardHidden|orientation" android:label="Preferences" android:name="Preferences" android:screenOrientation="behind"/>
<receiver android:enabled="true" android:name="WifiSambaReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
<data android:scheme="file"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
<data android:scheme="file"/>
</intent-filter>
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
A起動シェル<action android:name="android.net.wifi.STATE_CHANGE"/>
<action android:name="com.funkyfresh.samba.RESTARTSAMBA"/>
<action android:name="com.funkyfresh.samba.STOPSAMBA"/>
<action android:name="com.funkyfresh.samba.RECONFIGURED"/>
<action android:name="com.funkyfresh.samba.NEWPASSWD"/>
</intent-filter>
</receiver>
<service android:name="SambaFilesharingService">
<intent-filter>
<action android:name="com.funkyfresh.samba.SambaFilesharingService"/>
</intent-filter>
</service>
</application>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
</manifest>
・WiFiが停止していたら、起動する。
・Samba Filesharing のサービスを起動する。
・WiFiが接続されるのを待って、Samba Filesharing を有効にする。
・Samba Filesharing 画面を表示
・ecoctl の WiFi自動停止を無効にする
#!/system/bin/sh
dumpsys wifi | grep 'Wi-Fi is enabled'
if [ "$?" -eq 0 ]
then
echo 'enable'
else
echo 'disable'
svc wifi enable
fi
am startservice -n com.funkyfresh.samba/.SambaFilesharingService --ez useWifiLock true --ez useMcastLock true
i=0
while [ $i -lt 10 ]; do
echo $i
i=$((i+1))
dumpsys wifi | grep 'current HSM state: ConnectedState'
if [ "$?" -eq 0 ]
then
echo 'connect'
am broadcast -a com.funkyfresh.samba.RESTARTSAMBA
am start -n com.funkyfresh.samba/.samba
am startservice -n com.jp.ssipa.ecoctl/.MyService --es SERVICE_STATUS SET_SETTING --es SUB_STATUS WIFI_NW_CHECK --ez VALUEb false
break
else
echo 'disconnect'
fi
sleep 2s
done
exit 0
B停止シェル
・Samba Filesharing を無効にする。
・ecoctl の WiFi自動停止を有効にする
#!/system/bin/sh
am broadcast -a com.funkyfresh.samba.STOPSAMBA
am startservice -n com.jp.ssipa.ecoctl/.MyService --es SERVICE_STATUS SET_SETTING --es SUB_STATUS WIFI_NW_CHECK --ez VALUEb true
A、Bのシェルを、 Terminal Shortcut Pro で、HOME画面から呼び出せるように登録。(ショートカットのアイコンも、好きな物にリソース差し替え)
HOME 画面から、起動・停止が出来るようになりました。
■二周年
Terrain を使い始めて二年たったので、再レビュー・・・ 最近は余り新しい話題はありません。
◆見た目
相変わらず外観の劣化は全く無いです。ケース未使用ですがキズも増えないし裏面もマットなままで全くテカりません。安っぽさを感じさせない所が良いです。
Shiftキーが Ctlキーに変わりました。通常の入力で Ctl + UIOP 変換 & Ctl + XCV を多用する為。これで英カナ全半選択、切り貼りが自由自在。Shiftキーは Push-to-Talk(Convenience)キーに、Push-to-Talk(Convenience)キーは Speaker キーに移動。
四方向カーソルと Ctrl、Shift が使えてこその QWERTY キーボードです。入力のしやすさは最高。
実は、訳有って Xperia Z4 も使っていますが、入力が面倒なので Z4 はサブ機、Terrain がメイン機。ちなみに今回の写真は Z4 で撮影、流石に写真の綺麗さでは負けます(汗
◆nand unlock その後
現在 SYSTEM 領域の実質使用量は約 1GB 程度。一部の人からも報告ありましたが、この状態で使うと安定度が下がります。日に1回〜2回、何の前触れもなく突然リセットがかかる・・・
結局、SYSTEMストレージの使用量が元々の上限の 780MB を越えると徐々に安定度が落ちる様です(理由は不明)。
標準機能でアプリの一部を SDカードに移動しても良いのですが、標準機能は制限が多いので Link2SD を再び復活。(使い方はこちら)
LINK2SD はブート後にソフトリブートが必要なので、起動時スクリプトの boot.sh を以下に修正。
#!/system/bin/sh
if test -f /data/local/tmp/softreboot
then
rm /data/local/tmp/softreboot
exit 0
fi
touch /data/local/tmp/softreboot
#for swap
busybox swapon /dev/block/vold/179:35
echo 60 > /proc/sys/vm/swappiness
#for LINK2SD
mount -t ext2 /dev/block/vold/179:34 /data/sdext2
#soft reboot
test -f /data/local/tmp/softreboot && setprop ctl.restart surfaceflinger
test -f /data/local/tmp/softreboot && setprop ctl.restart
LINK2SD で一部SDに移し、SYSTEMストレージの使用量を 780MB 700MB 以下にすると安定しました。
実質 780MB までしか使えないし、起動時にソフトリブートするなら nand unlock の意味が無い様に見えるかも!?
でも 780MB を越えることが全く出来ないのと、一時的に 2GB まで使えるのでは、やっぱり使い勝手が結構違います。nand unlock 出来るなら、やって損は無いと思います。
◆SYSTEM バックアップ
システムストレージのフルバックアップは便利です。約5分でバックアップもレストアも可能。 nand unlock の大きなメリットの1つ。
バックアップイメージを別の Terrain にレストアしても問題なく状態移行されて、使用できました。
現在は SYSTEMストレージサイズを 4GB も使わないので 2GB に縮小。2GBにするとddコマンド一回でバックアップ、レストアできるので更にラクです。
なお LINK2SD 等で SD に移している場合は、バックアップ前に全て SYSTEMストレージに戻しておく必要があるので注意。
◆アプリいろいろ、特に Terrain 用に便利なアプリを幾つか。
ComittoN
マンガviewer。
最初は Perfect Viewer を使っていましたが、Perfect Viewer は画像を拡大して頁を送ると元の拡大率に戻ってしまいます。
ComittoN は画像を拡大して頁を送っても拡大率をキープしてくれるので、画面が小さい Terrain 向き。処理速度も Perfect Viewer より速い。 ただし自動縦横回転してくれないので普通の画像Viewerには使えません。
bVNC: Secure VNC Viewer
VNC viewer
これまた Terrain の小さな画面でもちゃんと使える VNC viewer
動作モードが 4つあるのですが、タッチパッドモードがおすすめ。 接続後、右下メニューから Inpur Mode−Simulated touchpad を選択。
Android の標準とは違って、PC のタッチパッドの様にマウスカーソルを動かします。最初は違和感が有りますが、慣れれば小さな画面でも細かい操作ができます。タップで左クリック、BACK で右クリックです。
Calsma 関数電卓
数式電卓。
数式電卓は幾つかありますが、良さそうなのは Android4.0 に対応してない物が多かった。Terrain で使えて最も使いやすかったのがコレ。Androidアプリにしては、珍しくヘルプがしっかりしているのも良い。
DSP manager (Play Store には無いので、apkをアップします)
インストール後 Settings−Sound−Music effects で DSP manager を選択。その後、DSP manager を起動すると設定画面が出るので、設定。
「ベースブースト」と「バーチャルルームエフェクト」はかなり効きます。
※ダイナミックレンジコンプレッションは有効にするとヘンになるので、使用しないように注意。
Amazonビデオ (旧バージョンの apk をアップします)
Amazonプライム会員は、無料でプライムビデオが見放題。Android 上でも Amazonビデオアプリ を使えば視聴可能です、が、最新バージョンは Android4.0 否対応・・・
過去に 4.0 対応していた旧バージョンをアップしておきます。
LTE が使えない Terrain でもストリーミング再生可能(画質は若干荒い)。
ダウンロードも出来ますが旧バージョンではダウンロード先に SD を選択できず SYSTEMストレージ固定。でも nand unlock で領域拡張してあれば映画1本位は余裕でダウンロード出来ます。
安定性が気になる場合は LINK2SD の有料版(238円)を使えばダウンロード後のデータを SD へ移動可能。この状態でそのまま SD へダウンロードできれば良かったのですが、残念ながら出来ませんでした。
Firefox 45.0.2 と Adobe Flash 11.1.115.81
Android ブラウザで唯一 Flash が動く組み合わせ。最新バージョンでは動きません・・・。上のリンクで旧バージョンを取れます。
Windows 版の Firefox も徐々に Flash が動かなくなっています。Windows 版では 48.0.2 辺りまでか・・・?
◆その他、幾つか
・バッテリーは1つ目を使用中、まだ劣化は有りません。
・システムストレージ上の /data/tmp/tmpEn が 100MB位 になっている事有り。消しても問題ありません。定期的に消しましょう。
・NFCの反応が悪いと思っていましたが、叩くように接触させると比較的反応が良いようです。
・ヘッドフォンジャックを直接使うと若干ノイズが聞こえますが、BT 経由にすると無くなります。
・ソフトリブート
やり方に以下の2つ有り。 Aだと安定度が下がる気がします、@の方が良さそう。
@
setprop ctl.restart surfaceflinger
setprop ctl.restart
A
busybox killall system_server
■アイコン(リソースファイル)差替
今回も Terrain 固有の記事ではありません。
Android でのアイコン変更方法について調べました。まずは簡単なホーム画面のアイコン変更方法。いろいろやり方はありますが、例えば・・・
QuickShortcutMaker(ショートカットツール)
これを使えばホーム画面のアイコンを好きな画像に変えられます。更に、このアプリはアプリの画面毎にショートカットを作れる事もできます。ホーム画面を使いやすくしたい人にはオススメ。
ここまでは前振りで、これからが本題です。
ウィジェットのアイコンを変えたい場合、QuickShortcutMaker でも無理です。
例えば
Wi-Fiテザリングスイッチャー これはホームからテザリングの ON/OFF できて、かつ WiFi が ON の時は自動で WiFi を OFF/ON してくれる便利ツール。 ですが、ON/OFF がアイコンからちょっとわかりにくい。
↓これはテザリング OFF(赤枠)
↓これは テザリング中
ウィジェットのアイコンを変更したい場合、apk 内のリソースの画像を差し替える必要があります。リソースファイルを差し替えるツールは Windows ならば Resource Hacker が有名。
Android で Resource Hacker と同じ事をやってみます。
以下の手順でできる筈ですが、やったのがかなり前なので手順不足等あったらすいません。
なお、リソース差し替え作業には java と Android SDK をセットアップした PC が必要です。
◆Apktool の入手
右のURLより ・Apktool の最新 と ・23 Dec 2012 - Scripts r05-ibot Released を入手 https://ibotpeaches.github.io/Apktool/
◆Apktool の配置
apktool_x.x.x.jar を apktool.jar にリネーム
Scripts r05-ibot Released から apktool.bat、apktool.jar を展開
java と Android SDK をセットアップした PC の 〜\android-sdk\tools\ 配下に apktool.jar、apktool.bat、apktool.jar を配置する。
◆apk展開バッチファイル
以下の内容の展開用バッチファイルを作成。下線部は PC に合わせて修正。
@echo off
echo Set Parameter
set JDK_DIRECTORY=C:\Program Files\Java\jdk1.8.0_65
set ADK_DIRECTORY=C:\Program Files\Android\android-sdk
set path=%path%;%JDK_DIRECTORY%\bin\;%ADK_DIRECTORY%\tools\;%ADK_DIRECTORY%\platform-tools\
echo Backup APK
copy /y "%~dpnx1" "%~dpnx1.bak"
echo Expand APK
"%JDK_DIRECTORY%\bin\java" -jar "%ADK_DIRECTORY%\tools\apktool.jar" d "%~dpnx1"
pause
◆apk再構成用バッチファイル
以下の内容の再構成用バッチファイルを作成。下線部は PC に合わせて修正。
@echo off
echo Set Parameter
set JDK_DIRECTORY=C:\Program Files\Java\jdk1.8.0_65
set ADK_DIRECTORY=C:\Program Files\Android\android-sdk
set KEYSTORE_FILE=%ADK_DIRECTORY%\apktool_keystore
set KEY_ALIAS=mykey
set KEYSTORE_PASS=password1234
set path=%path%;%JDK_DIRECTORY%\bin\;%ADK_DIRECTORY%\tools\;%ADK_DIRECTORY%\platform-tools\
echo Check Keystore
if not exist "%KEYSTORE_FILE%" "%JDK_DIRECTORY%\bin\keytool" -genkey -keystore "%KEYSTORE_FILE%" -validity 10000 -alias %KEY_ALIAS% -storepass "%KEYSTORE_PASS%" -keypass "%KEYSTORE_PASS%"
echo Rebuild APK
"%JDK_DIRECTORY%\bin\java" -jar "%ADK_DIRECTORY%\tools\apktool.jar" b "%~dpn1" -o "%~dpn1_rebuild.apk"
echo Set Keystore
"%JDK_DIRECTORY%\bin\jarsigner" -keystore "%KEYSTORE_FILE%" -storepass "%KEYSTORE_PASS%" -digestalg SHA1 "%~dpn1_rebuild.apk" "%KEY_ALIAS%" -tsa http://timestamp.digicert.com
pause
◆apk展開
上で作成した2つのバッチファイルと、処理したい apk を1つのフォルダに格納します。
インストール済アプリから apk を取り出すツールはたくさんあるので、適当なヤツを使って下さい。私が使っているのはこれ↓
apk抽出
フォルダに配置したら、apk を展開用バッチにドラッグ&ドロップします。DOS窓が開いて、以下のようになれば展開成功。
Set Parameter
Backup APK
1 個のファイルをコピーしました。
Expand APK
I: Using Apktool 2.0.3 on Wi-Fi テザリング スイッチャー.1.1.6.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\ssipa\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
続行するには何かキーを押してください . . .
フォルダ内に apk のバックアップと、apk 名前でリソースを展開したフォルダが作られます。
◆リソース変更
展開されたリソースの変更したいファイルを差し替えます。
例えば、Wi-Fi テザリング スイッチャー であれば、〜\Wi-Fi テザリング スイッチャー.1.1.6\res\drawable-hdpi-v4 配下にアイコン用の PNG ファイルがあるのでそれを差し替えます。
アイコンは通常 〜\res\drawable-xx フォルダに格納されます。
drawable-xx が複数ある場合は画面の解像度用に分けているのですが、ファイル名が同じ場合は一番大きい物を残して他を削除しても問題ない筈。
◆apk再構成
元の apk を今度は再構成用バッチにドラッグ&ドロップします。DOS窓が開いて、以下のようになれば展開成功。
初回実行時のみ、キー生成用の情報を聞いてくるので適当に入力します。最後の「y」以外はでたらめで問題有りません。
Set Parameter
Check Keystore
姓名は何ですか。
[Unknown]: ssipa
組織単位名は何ですか。
[Unknown]: x
組織名は何ですか。
[Unknown]: x
都市名または地域名は何ですか。
[Unknown]: x
都道府県名または州名は何ですか。
[Unknown]: x
この単位に該当する2文字の国コードは何ですか。
[Unknown]: ja
CN=ssipa, OU=x, O=x, L=x, ST=x, C=jaでよろしいですか。
[いいえ]: y
Rebuild APK
I: Using Apktool 2.0.3
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...
Set Keystore
jarは署名されました。
続行するには何かキーを押してください . . .
フォルダ内に XXX_rebuild.apk というファイル名で新しい apk が作成されます。この apk をインストールすれば完了。
↓テザリング OFF
↓これは テザリング中
画像以外に、画面やメニューの文字列を差し替える事もできます。後 AndroidManifest.xml を変更して 本体リソースへのアクセスを制限するなんて事もできます。
■AtokSet(ATOK 入力モード改善)
その昔、[es]用に AtokSet というアプリを作りました。タスク毎に ATOK の初期入力モードを設定出来るという物で、個人的には重宝しました。
重宝したので、実は AtokSet for Windows(ExImeCtlSet) も作成。
まじめに作るのが面倒だったので半分はスクリプトです。それでもしっかり動いていて、今もバリバリ現役。これが無いと結構不便です。ちなみに、AtokSet for Windows は ATOK で無くても動く筈。
で、Android 版。
親切なアプリは適切な入力モードを選択してくれるのですが、中にはノーコンもあります。
特にターミナルソフトはノーコン(初期入力が日本語になる)ものしか見つけられず、使っていて結構イライラします。
とは言っても、Andoroid では自分以外のプロセスを原則コントロール出来ないので、はなから諦めていました。
が、、、最近になって出来るかもしれない、、、 となり、トライ。
紆余曲折の末、非常に幸運!な事に、完成できました。
AtokSet for android
なぜ「幸運」かと言うと、今回のやり方で制御出来るのは
のみだからです。
「Google日本語入力」も「nicoWnnG」もダメでした。(泣
ただし上記の条件であれば(自分のTerrainでしか試してませんが)パーフェクトに制御できます。とりあえずは満足。
それにしても Android の制約の多さにはイヤになります。特に 5.0 以降はヒドイ様です。将来は WindowsPhone もいいかな、と思ってしまいました。
■インテント発行
今回も Terrain 固有の記事ではありません。
EcoCtl のメニューに手動で同期を開始する機能がありますが、それを呼び出そうとすると EcoCtl の画面を呼び出さなければならないのが面倒です。
作りとしては画面の Activity から Service に Intent を投げているので、他の手段でも Intent を投げれば処理を呼び出せる筈。
調べてみると「am コマンド」を使えば出来るらしい。
◆画面の呼出、以下の様なコマンドをシェルから投入すれば出来ます。
am start -n com.jp.ssipa.ecoctl/.MainActivity
-n の後ろに指定する 画面名(Activity名)は、 QucikShortcutMaker を使えば調べられます。
◆サービスの呼出、以下の様なコマンドでサービスにIntent送信出来ます。
am startservice -n com.jp.ssipa.ecoctl/.MyService --es SERVICE_STATUS setSyncForRequest
--es はIntentにStringの情報を付加するオプション、「SERVICE_STATUS」はKEY 「setSyncForRequest」がvalue。
これを付けたIntentを送ると EcoCtl は手動同期が動くように作ってある(何を送るかはアプリの作りに拠る)。
で、これを投入してみるのですが、何故か動かず、、、
いろいろトライした結果、Root権限で投入すると動きました。Webで調べた限りではそれっぽい情報は見つかりません、Terrain固有なのでしょうか?
ちなみに、root権限が必要なのは、サービスに対するIntent送信だけの様です。
BKLightCtl で画面輝度を任意に変更する事も可能。
画面)am startservice -n com.jp.ssipa.bklightctl/.MyService --es SERVICE_STATUS TEST_S --ei TESTVALUE {0-255}
キー)am startservice -n com.jp.ssipa.bklightctl/.MyService --es SERVICE_STATUS TEST_K --ei TESTVALUE {0-255}
サービスの呼出は常駐していなくても、アプリがインストールされていれば動作します。
◆ブロードキャスト
ブロードキャストの送信は、root権限不要。例えば MediaVolCtlのウィジェットを置いた状態で以下を送ると、メディア音量のミュートを切替られます。
ミュート)am broadcast -a com.jp.ssipa.mediavolctl.ACTION_MUTE
ミュート解除)am broadcast -a com.jp.ssipa.mediavolctl.ACTION_MUTE_OFF
■メディア音量調整
今回は Terrain 固有の記事ではありません。
Android で操作性の悪いメディア音量。「メディア音量」でググルと似たような話題がたくさん出てきます。私はヘッドフォンでしか音楽は聴かないので、ヘッドフォンの着脱に合わせてミュート/ミュート解除して欲しい。
探せばアプリが有りそうですが、要望にぴったり合うアプリを探すのも面倒になったので自作。
MediaVolCtl(メディア音量自動ミュート)
ウィジェットなんて皆作っているから簡単なのかと思ったら結構難しかった。更に Bluetooth ヘッドフォンも対応してみたけど、それも難しかった。
■システムストレージのフルバックアップ
新リカバリモードからシステムストレージのバックアップを取ってみます。
アプリを入れシステムストレージを 1GB 程度を使用している状態で bu_data.sh の内容を元にバックアップを取ると、tar が途中で止まってしまいます、、、
tar ではサイズが大きくなるとダメな様です。
tar がダメなので、次ぎに ddコマンドでトライ。現在のパーティションサイズが 4GB なので 4GB を dd すると、これもまた最後でエラーになってしまいます。
試しに 2GB だけを dd すると正常終了。パーティションサイズが 2GB 以下でないとバックアップがとれない、、、と思いましたが、dd なので二分割して 2GB × 2回で処理すれば問題無い筈です。
以下、現在のシステムストレージパーティション。
13 2818048 11206655 4.0 GiB 8300 userdata
以下、バックアップ手順(パーティションサイズが違う場合は、skip、count の値、回数を変える必要有り)
SDカードの /external_sd/ 直下に、前半 2GB を userdata_bk1.bin 後半 2GB を userdata_bk2.bin としてコピーします。
D:\>adb reboot recovery
D:\>adb shell
RECOVERY:/ # mkdir /mnt/extsd
RECOVERY:/ # mount /dev/block/mmcblk1p1 /mnt/extsd
RECOVERY:/ # dd if=/dev/block/mmcblk0 of=/mnt/extsd/userdata_bk1.bin bs=512 skip=2818048 count=4194304
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.0GB) copied, 234.750984 seconds, 8.7MB/s
RECOVERY:/ # sync
RECOVERY:/ # dd if=/dev/block/mmcblk0 of=/mnt/extsd/userdata_bk2.bin bs=512 skip=7012352 count=4194304
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.0GB) copied, 208.850145 seconds, 9.8MB/s
RECOVERY:/ # sync
RECOVERY:/ # umount /mnt/extsd
RECOVERY:/ # exit
D:\>adb reboot
正常にリストアできるか試してみます。↓バックアップ時のインストール状態。
↓A1 SD Bench をアンインストール。
以下、リストア手順。
D:\>adb reboot recovery
D:\>adb shell
RECOVERY:/ # mkdir /mnt/extsd
RECOVERY:/ # mount /dev/block/mmcblk1p1 /mnt/extsd
RECOVERY:/ # dd if=/mnt/extsd/userdata_bk1.bin of=/dev/block/mmcblk0 bs=512 seek=2818048
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.0GB) copied, 417.448192 seconds, 4.9MB/s
RECOVERY:/ # sync
RECOVERY:/ # dd if=/mnt/extsd/userdata_bk2.bin of=/dev/block/mmcblk0 bs=512 seek=7012352
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.0GB) copied, 414.721318 seconds, 4.9MB/s
RECOVERY:/ # sync
RECOVERY:/ # umount /mnt/extsd
RECOVERY:/ # exit
D:\>adb reboot
↓アンインストールした A1 SD Bench が元に戻りました。起動等も問題なし。
CLASS10 の SDカードで 4GB のシステムストレージのフルバックアップが約8分、フルレストアが約15分。
単純にフルバックアップ、フルレストアが出来るのはありがたいです。
■音声通話問題の対処
alex-kas 方式で root化すると音声通話で音声が聞こえなくなります(私だけ?)。一度スピーカー音声にして戻すと直って以後音声が出るようになりますが、再起動でまた同じ状態に戻るので、この状態で使い続けるのは厳しいです。
一旦は全戻しをかけたのですが、組み合わせた状態でも使用できることに気が付きました。
alex-kas 方式で root化し、必要な /SYSTEM 配下の変更を完了した状態で、bootイメージだけを戻します。
以下手順例。
◆前作業
・SDカードの brnects0.715フォルダに、オリジナルの bootイメージを boot.current.bin として格納。
・デバッグモードの Terrain を PC に接続。
◆bootイメージ戻し
adb reboot recovery
adb shell
mkdir /mnt/extsd
mount /dev/block/mmcblk1p1 /mnt/extsd
dd of=/dev/block/mmcblk0p9 if=/mnt/extsd/brnects0.715/boot.current.bin
umount /mnt/extsd
exit
adb reboot
これで通話が正常にできるようになりました。root権限、テザリングも使えるし、SYSTEMストレージは拡張した状態で使えます。
この状態で出来ないのは /SYSTEM 配下の変更ですが、変更したい時は同じ手順で bootイメージを kas.boot.bin で差し替えれば /SYSTEM 配下を変更可能な状態に切替えられます。インストールアプリ、データはそのまま、何の影響も無く切替可能。
/SYSTEM 配下をリアルに変更できないのはちょっと残念ですが、実際使う上で問題は殆ど無いので許容範囲。
その他の変更、、、 新bootイメージの状態で、/system/xbin配下に、busyboxと、よく使うコマンドを ln で追加登録。
お世話になっていた Link2SD は不要になってしまったので削除。 SD Speed Increase も、なぜかバッファ追加すると落ちやすくなる?(気がする)ので削除。
以上で、今回のカスタマイズは一旦完了です。
■出荷状態に戻す
alex-kas 方式で root化した場合、標準の Factory data reset を呼び出しても戻らず、状態がおかしくなります。
以下の手順で、出荷状態まで戻せました。
手順については入力するコマンドだけを順番に羅列しています。root化を実施した人ならば、何をやっているかは分かると思います。
◆戻しに必要なファイル
・オリジナルのリカバリイメージ (◆準備 で取得したファイル)
・オリジナルのブートイメージ (◆ブートイメージの置換 で退避される boot.current.bin)
・オリジナルの build.prop (◆バックアップ の ./bu_system.sh で採取した system.tar を展開すると取り出せます)
・リカバリイメージの戻し用シェル restore_recovery.sh (元のリカバリパーティションが 618496 〜 638975 の前提で作成、違う場合は修正要)
↑4ファイルのアーカイブ reset for nec_terrain-master.zip (オリジナルのブートイメージはファイル名を kas.boot.bin に変えてあります)
・SYSTEMストレージのユーザ領域とPHONEストレージのバックアップ(◆バックアップ で SDカードの brnect08.715フォルダに退避)
◆前作業
・SDカードの brnects0.715 フォルダに以下を格納しておく。
−オリジナルのブートイメージ boot.current.bin を kas.boot.bin にリネームして格納
−オリジナルの build.prop
・/data/local/tmp 配下に以下を格納しておく。
−オリジナルのリカバリイメージ org.recovery.bin
−run_root_shell (root化作業で配置されています)
・/SYSTEM配下に自分で追加したファイルは削除されないので自分で削除しておく(更新したファイルは元に戻る)。
・デバッグモードの Terrain を PC に接続。
◆userdata、GROW パーティション戻し ◆リカバリーモード実行
・パーティションサイズ戻し
adb reboot recovery (リカバリモードにする)
adb shell
cd /rbin
gdisk
/dev/block/mmcblk0
d
13
d
14
n
13
2818048 ←元の No.13 開始セクタ
4456447 ←元の No.13 終了セクタ
8300
n
14
4456448 ←元の No.14 開始セクタ
13565951 ←元の No.14 終了セクタ
8300
c
13
userdata
c
14
GROW
w
y
exit
・再フォーマット
adb reboot recovery
adb shell
mkfs.vfat /dev/block/mmcblk0p14
mkfs.ext4 -b 1024 -i 4096 /dev/block/mmcblk0p13
・内容をバックアップから戻す
./rr_data.sh
./rr_system.sh (bu_system.shを実施している場合)
・終了
exit
◆su と Superuser の削除 ◆リカバリーモード実行
adb reboot recovery
adb shell
mount /dev/block/mmcblk0p12 /system
rm /system/xbin/su
rm /system/app/Superuser.apk
exit
◆boot.bin と build.prop の戻し(SDカードのファイルを登録) ◆リカバリーモード実行
adb reboot recovery
adb shell
cd /rbin
./flash_boot.sh
exit
◆recovery イメージの戻し(/data/local/tmp/org.recovery.bin を登録) ◆ノーマルブート実行
adb reboot
adb push restore_recovery.sh /data/local/tmp/restore_recovery.sh
adb shell
cd /data/local/tmp
chmod 755 ./restore_recovery.sh
./run_root_shell -c ./restore_recovery.sh
・終了
exit
adb reboot
■起動時にスクリプト実行
alex-kas 方式では、起動時に動くシェルが有りません。
Android で一般的なのは、起動スクリプトの /init.rc から呼び出される /system/etc/install-recovery.sh に処理を追記する方式です。
しかし、Terrain では /system/etc/install-recovery.sh は存在しないし、/init.rc 内で /system/etc/install-recovery.sh の呼出がコメントアウトされているので、この方式は使えません。
調べた限りでは rootin.7z 方式と同様、VpnFaker を使うのが一番無難な様です。
以下、登録手順。
1.Vpnfaker for nec_terrain-master.zip をダウンロード、任意のフォルダに展開する。
2.Terrain のデバッガを ON にして、ADB を使用できる PC に USB接続。
3.PC の CommandPrompt を開いて、カレントフォルダを展開したフォルダに移動。
4.以下のコマンドを投入
adb push boot.sh /data/local/tmp/boot.sh
adb push busybox /data/local/tmp/busybox
adb push onBoot /data/local/tmp/onBoot
adb push run_root_shell /data/local/tmp/run_root_shell
adb push vpnfaker.sh /data/local/tmp/vpnfaker.sh
adb push VpnFakerV2.tar.gz /data/local/tmp/VpnFakerV2.tar.gz
5.以下のコマンドを投入
D:\>adb shell
shell@android:/ $ su
shell@android:/ # chown 0.0 /data/local/tmp/busybox
shell@android:/ # chown 0.0 /data/local/tmp/run_root_shell
shell@android:/ # chmod 777 /data/local/tmp/boot.sh
shell@android:/ # chmod 755 /data/local/tmp/busybox
shell@android:/ # chmod 755 /data/local/tmp/onBoot
shell@android:/ # chmod 755 /data/local/tmp/run_root_shell
shell@android:/ # chmod 755 /data/local/tmp/vpnfaker.sh
shell@android:/ # exit
shell@android:/ $ cd /data/local/tmp
shell@android:/data/local/tmp $ ./run_root_shell -c ./vpnfaker.sh
Device detected: NEC-NE-201A1A (126460101)
Attempt acdb exploit...
NEC-NE-201A1A (126460101) is not supported.
Attempt fj_hdcp exploit...
Attempt msm_cameraconfig exploit...
Detected kernel physical address at 0x80208000 form iomem
Attempt put_user exploit...
VpnFaker install...
uid=0(root) gid=0(root)
これで登録完了できた筈。
起動時に /data/local/tmp/onBoot が呼び出され、onBoot から 一時root で /data/local/tmp/boot.sh が呼び出されます。
なので、/data/local/tmp/boot.sh のスクリプトが起動時に自動実行されます。
6.起動時に swapon を行うようにしてみます。
今は LINK2SD を削除したので、SWAP は SDカードの2番目のパーティションになっています。boot.sh に以下のように記載。
#!/system/bin/sh
#mount SWAP(ext_SD 2nd partition)
/data/local/tmp/busybox swapon /dev/block/vold/179:34
echo 60 > /proc/sys/vm/swappiness
exit 0 #exiting
↓起動後に自動的に swapon されました。
shell@android:/ $ busybox free
busybox free
total used free shared buffers
Mem: 671144 622996 48148 0 23540
-/+ buffers: 599456 71688
Swap: 1054716 0 1054716
■rooted & nand unlock
alex-kas/nec_terrain による rooted & nand unlock を実施してみました。この方式で/SYSTEMの書き換え、パーティションの切り直し、等が可能になります。
逆に今までは何をやっても Factory data reset で元に戻せたのですが、今回の作業後は Factory data reset は使えなくなります。 rooting7z方式 との差を簡単に整理すると、、、
メリット
・/SYSTEM配下の内容を直接変更できる
・SYSTEMストレージとPHONEストレージ(合計5248MB)の配分を変更できる
・SYSTEMストレージとPHONEストレージのフルバックアップ・レストアができる
→たくさんインストールして使用容量が大きいとシェルが途中で停止します、通常のバックアップには使えません。
→(2016/01/16) SYSTEMストレージのフルバックアップ・レストアできました。PHONEストレージも同様の手順で出来る筈。
デメリット
・失敗すると端末文鎮化
・Factory data reset が出来なくなる(別の手順で元に戻す事は可能)
・音声通話で音声が聞こえない、、、一度スピーカー音声にして戻すと直って以後音声が出るようになるが、再起動でまた同じ状態に戻る。(個人的には致命的)
→(2015/12/29) bootイメージのみオリジナルに戻す事で回避しました。
現時点で見えている使用上の大きな差異はこれくらいです。それを踏まえて「やるぞ!」と言う人はこの後に進んでみてください。
基本 alex-kas/nec_terrain に書かれている手順に沿って進めていますが、異なる点は ※ で記載しています。
バッチファイルを使わずコマンドを手投入しているので、投入するコマンドに下線を付けておきました。
始める前に、手順を作ってくれた alex-kas/nec_terrain 、2ch Terrain スレの皆様、いつもながら助言して頂いた師匠に御礼申し上げたいと思います。
◆やっている事の概要 (The idea)
1.run_root_shell(一時root) を使用して、リカバリパーティションを移動
2.run_root_shell(一時root) を使用して、移動したパーティションに root権限で動作する新しいリカバリイメージを格納
3.新リカバリモード(root権限)で起動
4.新リカバリモードから、新ブートイメージ置換、ストレージ切り直し、su格納を行う
◆準備 (Exploit mandatory pre-requisits)
以下が必要。
・Factory data reset した Terrain (初期化状態でないと上手く行きません)
・ADB接続できる PC
・microSDHC (4GB以上)を刺しておく
・alex-kas/nec_terrain の 「Download ZIP」から nec_terrain-master.zip をダウンロードする → 中身を展開してPCのどこかに配置。
・※ 32bitWinPC を使っている人 ADBドライバ NEC Terrain ADB and CDC Serial.zip(今回、再登録が必要です)
・※ もし今 root が使えているなら、オリジナルのリカバリイメージをバックアップする。ADBシェルから
/system/bin/dd if=/dev/block/mmcblk0 of=/data/local/tmp/org.recovery.bin bs=512 skip=618496 count=20480
↑のコマンドを投入。/data/local/tmp/org.recovery.bin に出力されるファイルを保存。(必須作業では無いが出荷状態に戻す時には必要)
◆GPTテーブルの確認 (Stock GPT. THE MOST CRUCIAL PART) ◆ノーマルブート実行
Terrain にSDカードを刺しデバッグモードを ON にして、PCに接続します。
WEBではいきなりGPTテーブル一覧が出てきてびっくりするけど 「一致しているか確認しろ」 と言っているだけ。そもそも、一致しているに決まっている筈。
nec_terrain-master 内の recoveryフォルダ内 adbtestgpt.bat (↓以下の内容)を実行しろと書いてあるけど、、、
adb push run_root_shell /data/local/tmp
adb push sgdisk /data/local/tmp
adb shell chmod 755 /data/local/tmp/run_root_shell
adb shell chmod 755 /data/local/tmp/sgdisk
adb shell /data/local/tmp/run_root_shell -c '/data/local/tmp/sgdisk -p /dev/block/mmcblk0'
※ この通りにやっても上手く行きません。↑4行目までを1行ずつ手実行した後 ↓最後の行は以下の様に投入します。
D:\>adb shell
shell@android:/ $ /data/local/tmp/run_root_shell -c '/data/local/tmp/sgdisk -p /dev/block/mmcblk0'
Device detected: NEC-NE-201A1A (126460101)
Attempt acdb exploit...
NEC-NE-201A1A (126460101) is not supported.
:
一部省略
:
Partitions will be aligned on 2-sector boundaries
Total free space is 348587 sectors (170.2 MiB)
Number Start (sector) End (sector) Size Code Name
1 32768 294911 128.0 MiB 0700 modem
2 294912 425983 64.0 MiB FFFF flashbackup
3 425984 557055 64.0 MiB FFFF fatallog
4 589824 590335 256.0 KiB FFFF sbl1
5 590336 590847 256.0 KiB FFFF sbl2
6 590848 594943 2.0 MiB FFFF sbl3
7 594944 595967 512.0 KiB FFFF aboot
8 595968 596991 512.0 KiB FFFF rpm
9 596992 617471 10.0 MiB FFFF boot
10 617472 618495 512.0 KiB FFFF tz
11 618496 638975 10.0 MiB FFFF recovery
12 638976 2801663 1.0 GiB 8300 system
13 2818048 4456447 800.0 MiB 8300 userdata
14 4456448 13565951 4.3 GiB FFFF GROW
15 13565952 13582335 8.0 MiB 8300 persist
16 13582336 14319615 360.0 MiB 8300 cache
17 14319616 14462975 70.0 MiB 8300 tombstones
18 14462976 14465023 1024.0 KiB FFFF misc
19 14465024 14465025 1024 bytes FFFF pad
20 14465026 14465041 8.0 KiB FFFF ssd
21 14465042 14471185 3.0 MiB FFFF modemst1
22 14471186 14477329 3.0 MiB FFFF modemst2
23 14477330 14483473 3.0 MiB FFFF fsg
24 14483474 14483985 256.0 KiB FFFF sbl2_bkp
25 14483986 14488081 2.0 MiB FFFF sbl3_bkp
26 14488082 14489105 512.0 KiB FFFF aboot_bkp
27 14489106 14490129 512.0 KiB FFFF rpm_bkp
28 14490130 14491153 512.0 KiB FFFF tz_bkp
29 14491154 14511633 10.0 MiB FFFF recovery_bkp
30 14511634 14532113 10.0 MiB FFFF fota_config
31 14532114 14990865 224.0 MiB FFFF MM
↑Terrain のストレージ全体の GPT が出力されます。全部を確認する必要は無く、以下をチェックする。
・No. 3 が 〜557055
・No. 4 が 589824〜
・No.11 が 618496 〜 638975
・No.13 が 2818048〜
・No.14 が 〜13565951
もし万一、この数字が違う場合はこの後の手順内で一部数字を変える必要有り。
◆SDカードの準備 (micro-SD card)
いろいろ書いてあるけど、普通に FAT32 でフォーマットして刺しておけば大丈夫な筈。
◆リカバリパーティションの移動とリカバリイメージの置換 (Installing new recovery) ◆ノーマルブート実行
flash_recovery.sh が勝手にやってくれますが、ここが今回の最も中核の作業。
flash_recovery.sh の中身は以下↓ 下線の数字が GPT No.3の終了+1、No. 4の開始-1 になっている必要がある。flash_recovery.sh でリカバリパーティションの移動とリカバリイメージ(kas.recovery.bin)の置換を行っています。
#!/system/bin/sh
# remapping recovery partition to a standard hole
/data/local/tmp/sgdisk -d 11 /dev/block/mmcblk0 #deleting
/data/local/tmp/sgdisk -n 11:557056:589823 /dev/block/mmcblk0 #re-creating
/data/local/tmp/sgdisk -c 11:recovery /dev/block/mmcblk0 #naming
#/data/local/tmp/sgdisk -t 11:FFFF /dev/block/mmcblk0 -v
# flashing recovery
/system/bin/dd if=/data/local/tmp/kas.recovery.bin of=/dev/block/mmcblk0 bs=512 seek=557056 #flashing
/system/bin/sync #syncing
exit 0 #exiting
※ 元の WEB に 〜you must save it under the name kas.boot.bin locally on your pc〜 という記述があるけど誤記、nec_terrain-master 内の recoveryフォルダ内の kas.recovery.bin をそのまま使えば良い。
nec_terrain-master 内の recoveryフォルダ内 recovery\adbr.bat (↓以下の内容)を実行する。
※ run_root_shell と sgdisk はその前の手順で格納されているので、不要。
adb push run_root_shell /data/local/tmp
adb push sgdisk /data/local/tmp
adb push kas.recovery.bin /data/local/tmp
adb push flash_recovery.sh /data/local/tmp
adb shell chmod 755 /data/local/tmp/run_root_shell
adb shell chmod 755 /data/local/tmp/sgdisk
adb shell chmod 755 /data/local/tmp/flash_recovery.sh
adb shell /data/local/tmp/run_root_shell -c '/data/local/tmp/flash_recovery.sh'
※ adbtestgpt.bat が上手く行かなかったので、この後の全ての作業は .bat の内容を1行ずつ手実行しています。(シェルは、adb shell内から実行)なので、bat を直接実行した時の見え方・動作については確認していません、、、
ファイルを格納後 flash_recovery.sh を adb shell から実行する。
D:\>adb shell
shell@android:/ $ cd /data/local/tmp
shell@android:/data/local/tmp $ ./run_root_shell -c '/data/local/tmp/flash_recovery.sh'
Device detected: NEC-NE-201A1A (126460101)
Attempt acdb exploit...
NEC-NE-201A1A (126460101) is not supported.
Attempt fj_hdcp exploit...
Attempt msm_cameraconfig exploit...
Detected kernel physical address at 0x80208000 form iomem
Attempt put_user exploit...
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
20480+0 records in
20480+0 records out
10485760 bytes transferred in 1.582 secs (6628166 bytes/sec)
◆ブートイメージの置換の準備 (Placing new boot image) ◆ノーマルブート実行
新しいブートイメージ(kas.boot.bin)と build.prop をSDカードの brnects0.715 フォルダに移送します。
nec_terrain-master 内の bootフォルダ内 adbb.bat (↓以下の内容)を実行する。
adb shell "mkdir /mnt/external_sd/brnects0.715"
adb push kas.boot.bin /mnt/external_sd/brnects0.715
adb push build.prop /mnt/external_sd/brnects0.715
◆新リカバリモードで起動(ADBドライバの再登録) (Placing new boot image) ◆リカバリーモード実行
PCから adb reboot recovery を投入。
D:\>adb reboot recovery
Terrain 上で NEC ロゴがでて再起動し、真っ黒画面になります。
※ 本来であれば、ここで新リカバリモードに adb shell で入れるのですが、初回は PC がデバイスを認識できない筈。リカバリモードのベンダーIDとプロダクトIDが変わっている為と思われます。
デバイスマネージャを開くと、↓こうなっている。
nec_terrain-master 内の systemフォルダ内の adbfb.tar.gz に 新リカバリモード向けの 64bit用adbドライバ一式があるのでそれを解凍。
解凍内の Android Composite ADB Interface フォルダ内に、◆準備で用意した32bit用ドライバの i386フォルダーをコピー。(64bitWinを使っている人は不要)
デバイスマネージャのエラー項目(NEC-NE-201A1A)を右クリックし「ドライバーソフトウェアの更新」から↑のドライバを登録すると、デバイスを認識できる筈(認識後のデバイス名は Android Composite ADB Interface)。
PC が認識すれば、adb shell で接続できます。以後の作業は、新リカバリモード上から実施していきます。
D:\>adb shell
RECOVERY:/ # ← root権限で動作
◆ブートイメージの置換 (Placing new boot image) ◆リカバリーモード実行
新リカバリイメージ内に用意されている /rbin/flash_boot.sh を実行。
flash_boot.sh の中身は↓以下。オリジナルを boot.current.bin にバックアップ。kas.boot.bin と build.prop を置換してます。
#!/sbin/sh
SBRD='/mnt/extsd/brnects0.715'
mkdir /mnt/extsd
mount /dev/block/mmcblk1p1 /mnt/extsd
mkdir $SBRD
dd if=/dev/block/mmcblk0p9 of=$SBRD/boot.current.bin
dd of=/dev/block/mmcblk0p9 if=$SBRD/kas.boot.bin
mount /dev/block/mmcblk0p12 /system
cd /system
cp $SBRD/build.prop .
chown 0:0 build.prop
chmod 644 build.prop
cd /
umount /system
umount /mnt/extsd
exit 0
書き込み前に、オリジナルの bootイメージが SDカードの brnects0.715フォルダに boot.current.bin としてバックアップされます。flash_boot.sh を2回動かすと、オリジナルが消えてしまうので、原則1回だけ実行しましょう。
flash_boot.sh を adb shell から実行した結果↓
RECOVERY:/ # cd /rbin
RECOVERY:/rbin # ./flash_boot.sh
mkdir: can't create directory '/mnt/extsd/brnects0.715': File exists
20480+0 records in
20480+0 records out
10485760 bytes (10.0MB) copied, 0.388006 seconds, 25.8MB/s
20480+0 records in
20480+0 records out
10485760 bytes (10.0MB) copied, 2.041355 seconds, 4.9MB/s
完了したら、adb shell から抜け、adb reboot で再起動します。
RECOVERY:/rbin # exit
D:\>adb reboot
◆バックアップ (Backup) ◆リカバリーモード実行
SYSTEMストレージのユーザ領域とPHONEストレージのバックアップを、SDカードの brnect08.715フォルダに取ります。(この後のパーティションサイズ変更でフォーマットをかける為、その後の戻し用)
新リカバリイメージ内に用意されている /rbin/bu_data.sh を実行する。
bu_data.sh を実行した結果↓
D:\>adb reboot recovery
D:\>adb shell
RECOVERY:/ # cd /rbin
RECOVERY:/rbin # ./bu_data.sh
app/
app-private/
backup/
backup/pending/
backup/pending/journal-2014489731.tmp
backup/com.android.internal.backup.LocalTransport/
:
一部省略(数百行)
:
Notifications/
Notifications/hangout_dingtone.m4a
※元の手順にはありませんが、初期状態に戻すときには /SYSTEM のバックアップが有った方が良いので取っておきます。(必須作業では無いが出荷状態に戻すときには必要)
RECOVERY:/rbin # ./bu_system.sh
◆パーティションサイズ変更 (Actual re-partitioning) ◆リカバリーモード実行
新リカバリイメージ内に用意されている gdisk を使って、SYSTEMストレージとPHONEストレージのパーティションサイズを変更します。
No.13 の開始の 2818048、No.14 の終了の 13565951 は変えられません。
サイズの計算方法は ( 終了セクタ − 開始セクタ + 1 )/ 2048 = ××× MB
↓オリジナルのサイズ
13 2818048 4456447 800.0 MiB 8300 userdata
14 4456448 13565951 4.3 GiB FFFF GROW
↓WEBの手順での見直しサイズ
13 2818048 13303807 5.0 GiB 8300 userdata
14 13303808 13565951 128.0 MiB FFFF GROW
※ PHONEストレージが128MBでは少なすぎると思われたので、今回はこのサイズにしました。
13 2818048 11206655 4.0 GiB 8300 userdata
14 11206656 13565951 1.1 GiB 8300 GROW
gdisk は対話形式で作業を行います。使うコマンドは以下。
・p パーティション一覧の表示
・d パーティションの削除
・n パーティションの作成
・c パーティション名の変更
・w 結果を反映して終了
・q 結果を反映しないで終了
gdisk を対話実行した結果↓ 最後に adb reboot recovery で再起動します。
RECOVERY:/rbin # gdisk
gdisk
GPT fdisk (gdisk) version 0.8.4
Type device filename, or press
◆フォーマット (Formatting) ◆リカバリーモード実行
パーティションを切り直した領域を、リカバリモード内からフォーマットします。
No.13 のフォーマットは時間が少しかかり、途中で止まっているように見える所もありますが、じっと待ちましょう。
D:\>adb shell
RECOVERY:/ # mkfs.vfat /dev/block/mmcblk0p14
RECOVERY:/ # mkfs.ext4 -b 1024 -i 4096 /dev/block/mmcblk0p13
mke2fs 1.41.12 (17-May-2010)
:
一部省略
:
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
◆バックアップから復元 (Restoring your files) ◆リカバリーモード実行
パーティション変更前の◆バックアップから復元します。新リカバリイメージ内に用意されている /rbin/rr_data.sh を実行する。
rr_data.sh を実行した結果↓
RECOVERY:/ # cd /rbin
RECOVERY:/rbin # ./rr_data.sh
app/
app-private/
backup/
backup/pending/
backup/pending/journal-2014489731.tmp
backup/com.android.internal.backup.LocalTransport/
:
一部省略(数百行)
:
Notifications/
Notifications/hangout_dingtone.m4a
RECOVERY:/rbin # exit
D:\>adb reboot
◆su、Superuser.apk の登録 (Placing su and Superuser.apk) ◆リカバリーモード実行
adb reboot recovery でリカバリモードにします。
D:\>adb reboot recovery
nec_terrain-master 内の systemフォルダ内 adbs.bat を実行するのですが adbs.bat の内容が間違っています。
※ カレントフォルダをnec_terrain-master 内の systemフォルダに移動した後、adbs.sh の内容を参考に ↓以下の内容を実行する。
adb push su /tmp
adb push Superuser.apk /tmp
adb push flash_superuser.sh /tmp
adb shell chmod 755 /tmp/flash_superuser.sh
adb shell /tmp/flash_superuser.sh
最後にノーマルリブートして全完了です。
D:\!Data\system>adb reboot
◆動作確認
D:\>adb shell
shell@android:/ $ su
shell@android:/ # ← root権限で動作!
↓SYSTEMストレージが 3.75GB になりました。今までの使用アプリをインストール済&一切SDに移動していない状態でも余裕有りです。
↓PHONEストレージは 1.12GB。
↓テザリングも普通に使えました。
↓日本語を表示すると、例によって中華フォント。例えば「今」がおかしいです。
/system/fonts 配下
ESファイルエクスプローラのrootモードで、/system/fonts 配下を更新。
元の DroidSansFallback.ttf → DroidSansFallback_.ttf にリネーム。日本フォントの DroidSansFallback.ttf を新規追加できました。
再起動すると「今」の表示が直りました。同じようにして、キーマップも書き換え出来ました。
rootin.7z の root化方式と比較して足りてない点(必要ならば自分でやりましょう)。
・/system/xbin/busybox の格納(/system/xbin/配下に直接追加できます)
・APN の登録
・不要なプリインストールアプリのDisable化
・日本語化(MoreLocale2 を入れる)
・XposedInstaller のインストール
使っていたアプリを全てインストールして数日使いましたが、前述のデメリット以外は安定性を含めて全く問題有りません。
後、標準の Factory data reset をすると黒画面のまま返ってこなくなります。電池を抜けば無理矢理再起動できますが、状態はおかしくなっています。
購入状態に戻すにはそれなりの手順が必要ですが、それについてはこちらで。
& BOOT時の swapon 呼出方法についてはこちらで。