2012年12月1日土曜日

EclipseでNDK(ndk-build)を使う為の設定を自動生成するスクリプト for Mac

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Setting up Automatic NDK Builds in Eclipse
を参考に、EclipseでNDKを利用する設定を行なってみたわけですが

毎回手動でBuildersを追加するのめんどくねー!?


と思ったので自動化しました。

スクリプト


作ったのが以下のスクリプト
xpathが入っていれば普通に動くはず

ndk_path="$ANDROID_NDK_ROOT/ndk-build"
project_name=`xpath .project "/projectDescription/name/text()" 2> /dev/null`
project_path=`pwd`
external_tool_builders=.externalToolBuilders
file_name=ndk-build.launch
if [ ! -d $external_tool_builders ]; then
mkdir $external_tool_builders
fi
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>
<launchConfiguration type=\"org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType\">
<stringAttribute key=\"org.eclipse.debug.core.ATTR_REFRESH_SCOPE\" value=\"\${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;resources&gt;&#10;&lt;item path=&quot;/$project_name/libs&quot; type=&quot;2&quot;/&gt;&#10;&lt;/resources&gt;}\"/>
<booleanAttribute key=\"org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND\" value=\"false\"/>
<stringAttribute key=\"org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE\" value=\"\${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;resources&gt;&#10;&lt;item path=&quot;/$project_name/jni&quot; type=&quot;2&quot;/&gt;&#10;&lt;/resources&gt;}\"/>
<stringAttribute key=\"org.eclipse.ui.externaltools.ATTR_LOCATION\" value=\"$ndk_path\"/>
<stringAttribute key=\"org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS\" value=\"full,incremental,\"/>
<booleanAttribute key=\"org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED\" value=\"true\"/>
<stringAttribute key=\"org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY\" value=\"$project_path\"/>
</launchConfiguration>" > "$external_tool_builders/$file_name"
builder_exists=`xpath .project "/projectDescription/buildSpec/buildCommand/name/text()" 2> /dev/null | grep "org.eclipse.ui.externaltools.ExternalToolBuilder"`
if [ "$builder_exists" = "" ]; then
project_file=`while read LINE; do
echo $LINE
if [ "$LINE" = "<buildSpec>" ]; then
echo "<buildCommand>
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
<dictionary>
<key>LaunchConfigHandle</key>
<value>&lt;project&gt;/.externalToolBuilders/ndk-build.launch</value>
</dictionary>
</arguments>
</buildCommand>"
fi
done < ".project"`
echo $project_file > ".project"
fi


環境


adt-bundle-mac
android-ndk-r8c

使い方


ANDROID_NDK_ROOTにパスを通す


ndk導入時にANDROID_NDK_ROOTにパスを通しているとは思いますが念のため。
ついでにPATHにも通しておくとよりよい

ANDROID_NDK_ROOTの位置にndk-gen-externalToolBuildersを置く


ANDROID_NDK_ROOTにはndk-buildが居るはず。
同じ所に上のgistのコードを置く。
ファイル名は適当でいいけどここでは"ndk-gen-externalToolBuilders"
chmod +xで実行権限の付与を忘れずに



EclipseでAndroid Projectを作る


ndk-gen-externalToolBuildersはEclipseのプロジェクトファイルである.projectの内容に依存するのでまずEclipseプロジェクトを作ります。
NDKなので試しにsampleプロジェクトをimportしてみます。





.projectが出来ます





プロジェクトのディレクトリでndk-gen-externalToolBuildersを実行する


で、ターミナルからプロジェクトの所に行って、ndk-gen-externalToolBuildersを実行
その後Eclipse側のプロジェクトをRefreshしての設定からBuildersを見ると・・・

(゚д゚)ウマー




キタ━━━━(゚∀゚)━━━━!!
ndk-buildが追加されています。
後は普通にビルドして実行すると・・・



動いた・・・!


仕組み


めんどくさいので適当に。
Eclipseのプロジェクトファイルである.projectにBuildersを追加してます。
Buildersの定義ファイルを.externalToolBuilders/ndk-build.launchに吐いてます。
ndk-build.launchを生成するのに.project内の情報が必要なのでxpath使ってます。
以上

0 件のコメント:

コメントを投稿