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

またまたお久しぶりです。
アウトローな技術記事を書こうと思って研究をしているのですが、
なかなか難しいです。

今回は、Xcode4.5でサポート対象外となった旧バージョンiOSに
対応する方法をご紹介します。

設定はそんなに難しくはありません。
(1)Deployment targetの設定
(2)Valid Architecturesの設定
だけです。

ただし、「PROJECT」と「TARGETS」の2つで設定する必要が
ありますので、計4カ所の設定になります。

また、デバッグはiOS4.3以上が入っていないとXcodeがデバイスを
デバッグ端末として認識しないので、AdHocにてインストールして
デバッグすることになります。
よって、ホワイトボックステストができないのでデバッグに工夫が
必要になります。

早速設定方法に移ります。
まず、プロジェクトのプロパティ画面を表示します。
(1)Deployment targetの設定
a.「PROJECT」の設定
下図のように「PROJECT」の「Info」を開きます。
そこに赤枠を付けた「iOS Deployment Target」と言う項目が
あります。
右側のプルダウンを押すとXcodeで対応しているバージョンが
選択できるのですが、文字列をクリックするとキーボードから
入力できるようになります。
そこで図のように「4」と入力します。

img001.jpg




b.「TARGETS」の設定
こちらも「PROJECT」と同様に「TARGETS」を開き、「Summary」の
画面で「Deployment Target」に「4」と入力します。

img002.jpg




(2)Valid Architecturesの設定
この「Valid Architectures」で対象となるCPUのアーキテクチャを
設定します。
「Architecture」には、デフォルトで「armv7」、「armv7s」が
入っているのですが、「armv6」を追加します。
これで第2世代のiPod Touchで動作確認ができました。
※要注意※
「Architectures」の項目はデフォルトのままにしてください。
ビルドは通るのですが、「Organizer」で「Validate」をしたときに
エラーが出ます。



a.「PROJECT」の設定
下図のように、「Valid Architectures」に「armv6」を追加します。

img003.jpg




b.「TARGETS」の設定
下図のように、「Valid Architectures」に「armv6」を追加します。

img004.jpg




これで一通りの設定は終わりです。
デバッグは最初に書いた通りAdHocを使ってください。

「Organizer」から申請をして、ちゃんと公開されましたので
今のところ問題なさそうです。
まだまだiOS4系からアップデートしていない一般の
ユーザーも残ってますので、iOS4.3以降の新機能を
実装しなくても開発できるアプリはiOS4ユーザー対象に
してみてはいかがでしょうか。
ぜひお試しください。



スポンサーサイト
2012.10.19 Fri l iOS l コメント (0) トラックバック (0) 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

ようやく更新できました。
今回は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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。