Native Activityなどというものが、存在しているのを知らなかったので
少し調べてみました。さらに言うと、JNIさえ私は知りません。。
さらにさらに、Cをすっかり忘れてます。
だけども太規さんの気持ちはよく分かります。
_APP_DEBUG_をソースでdefineするのをやめて、コマンドライン
オプションで指定する方針はいかがでしょうか?
ccの-Dオプションを使うということです。
ndk-build -D_APP_DEBUG_=true
がうまく動けばいいのですが。
ただ、普通はmake時にdebugかreleaseかを指定して、その指定ごとに
何をするかはMakefileの中に書くのですが。。
一方、AndroidManifest.xmlの中は、普通のAndroidアプリであっても
ほぼ「手で直せ」式であるため、ある意味そういう設計思想です。
googleの中の人を呪うしかありません。
※なぜ、アプリ設計情報の中にそれを混ぜ込んだのかなあ。。
android:debuggable="true"
をdebug/releaseの指定により正しく置換して保管するshellを書くこと
は簡単でしょうが、私なら矛盾したケースはコンパイルを通さない
ようにすると思います。なぜなら、やっぱり「手で直せ」式という
設計思想に反すると、後で泣く予感がするからです。
以上、いまいち役にたたない情報でした。
どなたか実例を示されて下さるとよいのですが。。。
C/C++内のコードにおいては、assert()等で使う NDEBUG マクロが
そのまま利用できます。
NDEBUG は、リリースビルド時のみ定義されるマクロです。
NDK r6bの ./build/core/add-application.mk より抜粋。
--------
# set release/debug build flags. We always use the -g flag because
# we generate symbol versions of the binaries that are later stripped
# when they are copied to the final project's libs/<abi> directory.
#
ifeq ($(APP_OPTIM),debug)
APP_CFLAGS := -O0 -g $(APP_CFLAGS)
else
APP_CFLAGS := -O2 -DNDEBUG -g $(APP_CFLAGS)
endif
--------
In message <507ea6cf-4696-447d...@f3g2000pri.googlegroups.com>
"[android-group-japan: 15307] AndroidNDK のデバッグの切替"
"太規 <matsu...@gmail.com>" wrote:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
--
Hiroaki GOTO as "GORRY" : 後藤 浩昭
EMAIL: gorr...@gmail.com
基本的にデバッグ用のプロジェクトで作業を進め、製品版をビルドしたいときは以下の作業を ant にやらせます
前提条件:
myapp_debug というプロジェクトを使っていると仮定
Androidmanifest_release.xml というのを用意しておく
ant:
1) myapp_release フォルダを作成
2) myapp_debug/Androidmanifest_release.xml を myapp_release/ にコピーして
Androidmanifest.xml にリネーム
3) myapp_debug/ソースツリーから、製品版に必要なものだけを myapp_release/ にコピー
けっこう力技ですが、なにかのヒントになれば...
ビルド手順の簡略化については、Ant を使う方法があります。
build.xml に以下のように書き足します。
--------
<target name="ndk-debug">
<echo>build NDK debug</echo>
<exec executable="sh" failonerror="true">
<arg value="./ndk-debug.sh"/>
</exec>
</target>
<target name="ndk-release">
<echo>build NDK release</echo>
<exec executable="sh" failonerror="true">
<arg value="./ndk-release.sh"/>
</exec>
</target>
--------
これで、コマンドラインから
> ant ndk-debug
> ant ndk-release
でそれぞれ ndk-debug.sh / ndk-release.sh が実行できます。
それぞれのスクリプトにNDKのリリース/デバッグビルドを
行うようにしておけばよいでしょう。ここまでやっておけば、
> ant ndk-debug debug install
> ant ndk-release release install
で、「NDK部のビルド/Java部のビルド/APKの作成&署名/
端末へのインストール」までが1コマンドでできます。
同様に、AndroidManifest-debug.xml と AndroidManifest-release.xml を
作って、ビルド時にどちらかをAndroidManifest.xml へコピーするように
build.xml への target 記述で書いておけば、debuggable の修正も不要に
なるかと思います。
In message <0eca1707-c5dc-4e12...@v38g2000prh.googlegroups.com>
"[android-group-japan: 15319] Re: AndroidNDK のデバッグの切替"
"kacodama <le.s....@gmail.com>" wrote:
EMAIL: gorr...@gmail.com
なんと素晴らしい。antはそんなことができるのですね。
私はRelease版を作るときはいつもantを使ってます。
なぜなら、proguardのエラーを取りきるまでに何回もGUIで操作
するのは本当に忌々しい上、エラーの内容を知るにはコマンド
ラインからantを打った方がはるかに情報が豊富だからです。
あとはお好みですが、こんな感じで、
1 #!/bin/sh
2
3 ORGXML=AndroidManifest.xml
4 CPXML=AndroidManifest_copy.xml
5 /bin/cp -p $ORGXML $CPXML
6
7 sed 's/android:debuggable=\"true\"/android:debuggable=\"false\"/g' <
$CPXML > $ORGXML
shellを作ればrelease用のmanifestを作らないで済みますね。
あ、debug用はtrueとfalseを逆にしないとダメですが。