2016-10-16 7 views
2

GradleにNDKビルドを使用してJNIコードのデバッグバージョンをコンパイルするのは難しいです。Ndk-buildはGradleデバッグ可能でもNDEBUG = 1のままです:Androidスタジオではtrue

buildTypes { 
    debug { 
     debuggable true 
     jniDebuggable true 
    } 
} 

私は種類を構築するビルド/編集]をチェックアウトする場合、スイッチは影響を取っていることを確認することができます:私はそうのようなbuild.gradleファイルにデバッグするデバッグビルドを設定しました。しかし、かつて私は.externalNdkBuildディレクトリの内部ndkBuild_build_command.txtファイルをチェックし、私は次のエントリに注目してください:

NDEBUG=1 
APP_PLATFORM=android-9 

は私のJNIコードをデバッグしていないようことを確認することができます。ブレークポイントがトリガーされても、変数はすべてLLVMで「変数が使用できません」と表示されます。

デバッグビルドでもNDEBUGがオンになっている理由は何ですか? sidenoteとして、私はまた、アンドロイド9プラットフォームがどこに入っているのかわかりません...私は自分がどこにあっても自分自身を設定するつもりはありません。

答えて

4

あなたはexternalNativeBuildとAndroidのメーカー2.2を使用する場合は、例えば、パラメータのオーバーライドを通して、あなたのApplication.mkまたはNDK_DEBUG=1APP_OPTIM=debugを設定することができます

externalNativeBuild { 
    ndkBuild { 
    arguments "NDK_DEBUG:=1" 
    } 
} 
+0

これは役に立ちました。これは基本的に私が解決したものです。 Gradleを使用してNDK_DEBUG値を設定し、APP_OPTIMとその他のフラグを制御するためにApplication.mk内のその値を検出するだけです。このビルドシステムは絶対的な災害です。私の.imlファイル内でSELECTED_BUILD_VARIANTがなぜ "デバッグ"の代わりに "リリース"になってしまうのでしょうか?私は毎時間AndroidスタジオとGradleをますます嫌っています。 I * still * NDEBUG = 1が常にtrueに設定されているか、デバッグビルドであるかどうかはわかりません。しかし、あなたもNDK_DEBUGを定義していれば、それは最適化を取り除き、* NDEBUG = 1を定義解除するようです。不吉。 – aardvarkk

+0

あなたの質問/苦情に「はい」以外の短い回答はありません。 *ライブラリ*モジュール、または*アプリケーション*のためにndk-buildを実行しますか? –

+1

私のアプリケーションモジュール用です。私はC++ベースのCocos2d-xを使用しているので、ほとんど*すべて*はネイティブコード内で行われます。私は物事を一種の妥当な状態にすることができました。どのような理由でも、「リンクされたC++プロジェクトのリフレッシュ」を続けなければならないということが大きなものであることに気付きました。私は誰がキャッシュを無効にしてAndroid Studioを再起動し、プロジェクトをクリーニングし、Gradleファイルを同期させずに、リンクされたプロジェクトをリフレッシュせずにビルドを要求すると思ったのですか? – aardvarkk

関連する問題