上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top

永らくお待たせしました!
本業がバタバタしており、検証が進められなかったのですが、
ようやくPRADA Phone L-02Dの恒久的root化ができました!
※以下、自己責任において実行してください。
 文鎮化等端末の異常状態に関しては当方では責任を持ちません。
 また、文鎮化の結果、ショップ等への持ち込みによる迷惑行為はご遠慮ください。
 ご心配な方はここから先へ進まないようにしてください。

PRADA Phone L-02Dをroot化してみた
の続きから始めます。

ここでもL-01Dと同様のスクリプトが必要になりますが、
install-recovery.shはinit.rdで実行されませんので、
別のものに組み込みます。
init.rdの最後で実行されるhdcp.shに組み込んで行きます。
hdcp.shは/systemの下にありますので、以下のコマンドで
/systemをRW属性に変更します。

$ /data/local/bin/busybox mount -o rw,remount ¥
 /dev/block/platform/mmci-omap-hs.1/by-name/system /system



元のhdcp.sh

# hdcp.sh
#
# sungho.jung@lge.com, jh.koo@lge.com , kibum.lee@lge.com
#
# HDCP sh file

#!/system/bin/sh
if ls /data/mhl/key.bin ; then
echo "alreay exist" > /data/mhl.log
# if ls /data/mhl/hdcp_on ; then
/system/xbin/hdcp-test 4 /data/mhl/key.bin >> /data/mhl.log
echo "hdcp on step 1" >> /data/mhl.log
/system/xbin/hdcp-test 1 /data/en_hdcp.bin 3 >> /data/mhl.log
echo "hdcp on step 2" >> /data/mhl.log
# else
# echo "hdcp off" >> /data/mhl.log
# rm /data/mhl/key.bin /data/en_hdcp.bin
# fi
else
if ls /data/en_hdcp.bin ; then
rm /data/en_hdcp.bin
fi
echo "not exist" > /data/mhl.log
fi



変更後のhdcp.sh

# hdcp.sh
#
# sungho.jung@lge.com, jh.koo@lge.com , kibum.lee@lge.com
#
# HDCP sh file

#!/system/bin/sh
if ls /data/mhl/key.bin ; then
echo "alreay exist" > /data/mhl.log
# if ls /data/mhl/hdcp_on ; then
/system/xbin/hdcp-test 4 /data/mhl/key.bin >> /data/mhl.log
echo "hdcp on step 1" >> /data/mhl.log
/system/xbin/hdcp-test 1 /data/en_hdcp.bin 3 >> /data/mhl.log
echo "hdcp on step 2" >> /data/mhl.log
# else
# echo "hdcp off" >> /data/mhl.log
# rm /data/mhl/key.bin /data/en_hdcp.bin
# fi
else
if ls /data/en_hdcp.bin ; then
rm /data/en_hdcp.bin
fi
echo "not exist" > /data/mhl.log
fi

/data/local/bin/busybox mount -o rw,remount /dev/block/platform/mmci-omap-hs.1/by-name/system /system
/data/local/bin/busybox cp /data/local/bin/busybox /system/xbin/busybox
/data/local/bin/busybox cp /data/local/bin/su /system/xbin/su
chown root.shell /system/xbin/su
chmod 4755 /system/xbin/su
chown root.shell /system/xbin/busybox
chmod 755 /system/xbin/busybox
busybox mount -o ro,remount /dev/block/platform/mmci-omap-hs.1/by-name/system /system


青字斜体の部分を追加します。
これにより再起動を行ってもroot化処理が実施されるため、
再起動を実施した後でも紐無しでroot化状態になっています。
前回のブログで課題として残っていたバイブレータに関しても
再起動後から動作するようになります。

これでようやくL-02Dのroot化作業完了です!
永らくお待たせしてすいませんでした。
スポンサーサイト
2012.08.23 Thu l Android l コメント (1) トラックバック (0) l top

今回はAndroid APKを分解してソースに戻していきたいと思います。
開発しているとソースを改変しすぎて元に戻れなくなってしまうことがありますよね!
そんなときAPKがあればある程度ロールバックができたら便利だなぁと思います。
最終的にはjarからjavaに変換するので戻らない部分もありますが、
ソースを確認するレベルでは問題ないかと。
それでは分解していきましょう。

まずはじめに、APKの内容を展開できるようにします。
これは非常に簡単で、APKの拡張子をZIPに変更し、ZIPを解凍するだけです。

ここまできたらツールが必要になりますので、準備をしていきます。

(1)dexファイルをjarファイルに変換するツール
dex2jar

(2)jarファイルをjavaファイルに変換するツール
Java Decompiler

(3)バイナリXMLのテキスト化
android4me

上記のツールをダウンロードしたら早速各モジュールを読めるようにしていきます。

ソース編:
(1)dexファイルをjarファイルに変換する
→dex2jarを利用し変換いきます。

(2)Java Decompilerを利用してJAVAファイルを生成する
→エディタライクにJAVAファイルが閲覧でき、上部メニューの「ファイル」→「ファイルとして保存する」にて
 ファイル化ができます。
 この際、Androidの標準ライブラリは変換できませんので要注意です。
 また、一部変換できない部分はバイトコードのまま残り、参考となる解釈が付与されます。

XML編:
XMLをandroid4meに渡すことで読めるようになります。
コマンドは以下の通りです。

java -jar AXMLPrinter2.jar res/layout/main.xml



ファイル化は、

java -jar AXMLPrinter2.jar res/layout/main.xml > _main.xml


これをバッチ化しておくと楽になりますね。

以上でAPKの中身が確認できるようになったかと思います。
くれぐれも悪用はしないように!
2012.04.12 Thu l Android l コメント (0) トラックバック (0) l top

今回は、Android NDKにおけるAndroid.mkとApplication.mkに書くべき最適化オプションの考察です。

まず手始めにndk-buildコマンドには「NDK_DEBUG=0」は必須オプションです。
これを付けることによってデバッグシンボルが付与されなくなりますので、
デバッグはしずらくなりますが、libのサイズが小さくなり処理のオーバーヘッドもなくなります。

それでは本題のAndroid.mkとApplication.mkに入ります。
・Android.mk
Android.mkでは基本的な設定を行っていきます。
注意点としては、CPUの動作モードをarmモードにするかかthumbモードにするかです。
基本的に整数のみの計算の場合はthumbモードが高速に動作してくれます。
float系の演算が入った場合はFPUを利用したほうが高速になりますのでarmモードで動作させるようにします。
これは作成したプログラムを確認してみてください。

armモードの設定:

LOCAL_ARM_MODE := arm
LOCAL_ARM_NEON := true
TARGET_ARCH_ABI := armeabi-v7a



thumbモードの設定:

LOCAL_ARM_MODE := thumb
LOCAL_ARM_NEON := true
TARGET_ARCH_ABI := armeabi-v7a



・Application.mk
Application.mkはgccのオプションとしてはかなり後ろのほうに定義してくれます。

「-NDK_DEBUG=0」を付けると[-O2」が定義されるのですが、Application.mkにて「-O3」を定義すると
こちらが後ろになるため「-O3」オプションが有効になります。
Android.mkでは効かないオプションを付けていくと良さそうです。

FPUを利用する前提で最適化オプションを設定しています。

APP_CFLAGS := -O3 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -march=armv7-a -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -fno-exceptions -fno-rtti



上記はC++のときの最適化オプションですので、C言語のみの場合は「-fno-rtti」を外します。

APP_CFLAGS := -O3 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -march=armv7-a -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -fno-exceptions



今のところの最適化オプションはこんな感じです。
ARMv7以前のコアを搭載しているAndroidではFPUにneonが使えないので、別の定義が必要になりますが、
今のところXperiaX10まで遡っても問題なく動作してますので、これでOKかと。

またアップデートがありましたら公開していきます。
2012.04.01 Sun l Android l コメント (0) トラックバック (0) l top

五月雨で投下していますが、これでAndroid関係の基本的な開発環境が整備できるはずです。

今回はAndroid NDKの導入になります。
Android NDKはCPUはARM系に限定されるもののC/C++言語にて開発ができるため、
高処理負荷になりやすいライブラリを導入する際に効果的な開発環境です。
単純なメモリコピーだけでも3倍、ビデオやオーディオなどのこーデックであれば
それ以上に高速化されます。
また、C/C++言語を使用できますので、iPhoneとの親和性も高くなりますので、
覚えておくと良いことがいっぱいあります。
ただし、メモリ管理に関してはこれまでのWEB系言語と異なりかなり厳しくなります。
C/C++言語はメモリ管理をプログラム側で実施しなければなりませんので、
GCの動作を期待するコーディングはできません。
また、変数の型定義などもかなり厳密に定義されますので、自由度が下がりますので、
上手く使い分けてください。

Android NDKの導入は簡単です。
・Android NDKをダウンロードする
http://developer.android.com/sdk/ndk/index.html
↑からWindows版をダウンロードしてください。

・ZIPファイルを展開する
「android-ndk-r7b-windows」というフォルダに解凍されますので、「android-ndk」に
リネームしておきます。

・Pathを通します
「コンピューター」を右クリックして「プロパティ」から
WindowsXPの場合:「詳細設定」のタブ
Windows7の場合:「システムの詳細設定」→開いた「システムのプロパティ」から「詳細設定」のタブ
をそれぞれ開きます。
「環境変数」をクリックし、「システム環境変数」のリスト内にある「Path」の項目を開いて、
一番最後に先ほどのZIPを解凍した先を指定します。
元々指定されていたPATH;c:\android-ndk
※セミコロン区切りなので気をつけてください。

Cygwinのコンソールを開いて以下のコマンドを実行してみてください。

ndk-build



Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/cygdrive/e/android-ndk-r7b/build/core/build-local.mk:130: *** Android NDK: Aborting. Stop.


プロジェクトフォルダ以外ではエラーになりますので、これでOKです。

これでAndroid NDKの導入はできました。

2012.03.29 Thu l Android l コメント (0) トラックバック (0) l top

PRADA Phone L-02Dのroot化に成功しました!
※以下、自己責任において実行してください。
 文鎮化等端末の異常状態に関しては当方では責任を持ちません。
 また、文鎮化の結果、ショップ等への持ち込みによる迷惑行為はご遠慮ください。
 ご心配な方はここから先へ進まないようにしてください。

ただし、ここまでに色々とやってしまったため、この手法だけではうまくいかないのかもしれません。
これ以前に試したのは、SuperOneClick1.7、1.9、2.3.3、2.3.3+1.7のrageagainstthecageなどです。
いずれもrootは取得できませんでしたが、端末の状態に影響はあったかも!?

L-01Dと海外版PRADA Phoneのroot化の合わせ技です。

 >adb shell
 #mv /data/misc/wifi/config /data/misc/wifi/config_
 #in -s /data/local.prop /data/misc/wifi/config


 Wi-Fiの ON OFFを行う。

 #mv /data/misc/wifi/config_ /data/misc/wifi/config
 #echo ro.kernel.qemu=1 > /data/local.prop

 #reboot


SuperOneClick v1.7の「rageagainstthecage」を選択し、「Shell Root」をクリック。

 ディレクトリの作成と、ファイル転送

 >adb shell mkdir /data/local/bin
 >adb push busybox /data/local/bin/busybox
 >adb push su /data/local/bin/su


>adb shell
 #chmod 755 /data/local/bin/busybox
 #chmod 755 /data/local/bin/su
 #/data/local/bin/busybox mount -o remount,rw -t ext4 /dev/block/mmcblk0p27 /system

 #echo '#!/system/bin/sh' > /system/etc/install-recovery.sh
 #echo 'sleep 5' >> /system/etc/install-recovery.sh
 #echo '/data/local/bin/busybox mount -o rw,remount /dev/block/mmcblk0p27 /system' >> /system/etc/install-recovery.sh
 #echo '/data/local/bin/busybox cp /data/local/bin/busybox /system/xbin/busybox' >> /system/etc/install-recovery.sh
 #echo '/data/local/bin/busybox cp /data/local/bin/su /system/xbin/su' >> /system/etc/install-recovery.sh
 #echo 'chown root.shell /system/xbin/su' >> /system/etc/install-recovery.sh
 #echo 'chmod 4755 /system/xbin/su' >> /system/etc/install-recovery.sh
 #echo 'chown root.shell /system/xbin/busybox' >> /system/etc/install-recovery.sh
 #echo 'chmod 755 /system/xbin/busybox' >> /system/etc/install-recovery.sh
 #echo 'busybox mount -o ro,remount /dev/block/mmcblk0p27 /system' >> /system/etc/install-recovery.sh
 #chmod 755 /system/etc/install-recovery.sh
 #mv /system/bin/seccmmond /system/bin/seccmmond_
 #/data/local/bin/busybox mount -o remount,ro -t ext4 /dev/block/mmcblk0p27 /system
 #/system/etc/install-recovery.sh
 #echo > /data/local.prop


・なぜかバイブレータが動作しなくなります。w
・まだ永久root化はできてません。
 (rebootするとunrootedに戻ります)
 →2回目以降からはSuperoneclickと/system/etc/install-recovery.shを実行すればrootになれます。

ここに至るまでに何回か端末が文鎮化し初期化してしまったので成功した時はよかったのですが、
再検証したくないなぁ・・・と。
もしこの方法でできなければ教えてください。。。

検証としては、Titanium Backupの復元は成功しました。
mountは標準で入っているものを利用すると/systemをremountする際に端末が再起動(L-01Dと同じ現象)
するので、busyboxを使ってください。
setcpuも利用できました。
その他、検証中ですがバイブが動作しなくなる原因が知りたいです。。。
あと、永久化もできるといいですね!
2012.03.27 Tue l Android l コメント (11) トラックバック (0) l top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。