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

ようやく更新できました。
今回はMac上でEclipse日本語版を離床していきたいと思います。
Mac用EclipseとPleiadesを同じバージョンでダウンロードします。

Mac用:
http://www.eclipse.org/downloads/?osType=macosx

Pleiades:
http://mergedoc.sourceforge.jp/

本日現時点でIndigoになりますので、Indigoをベースにします。
せっかくなので日本語化だけではなくPleiadesのUltimateにインストールされている
プラグインも導入しましょう。

(1)必要なファイルをコピーする
・dropin
・plugins
Pleiadesの上記2フォルダの中身をMac用Eclipseにコピーします。

(2)eclipse.iniを編集します。
Pleiadesはeclipseフォルダの直下にあります。
Mac用はeclipseフォルダ内のeclipse.appを右クリックして「パッケージの内容を表示」をクリックし、
「Contents」→「MacOS」内にあります。

Pleiadesのeclipse.ini:

-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502
-product
org.eclipse.epp.package.jee.product
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
-javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar



MAC版のeclipse.ini:

-startup
../../../plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx_1.1.101.v20120109-1504
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Xms40m
-Xmx384m
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts



合成すると・・・

-startup
../../../plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx_1.1.101.v20120109-1504
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Xms40m
-Xmx384m
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread
-javaagent:../../../dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-Dorg.eclipse.swt.internal.carbon.smallFonts



変更箇所を斜体ボールドにしておきました。
これでPleiadesがMac上で動作するはずです。
2012.04.07 Sat l プログラミング講座 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

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