問題タブ [android-ndk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
memory - カーネルがオーバーコミットメモリを使用する場合、メモリを割り当てた後にNULLをチェックする必要がありますか?
malloc()の後にNULL(メモリが正常に割り当てられているかどうか)をチェックするのが一般的な方法です。
カーネルでメモリオーバーコミットが有効になっている場合、NULLになる可能性はありますか?割り当てごとにNULLを宗教的にチェックする慣行に従う必要がありますか?積極的なオーバーコミットメカニズムにもかかわらず、mallocはNULLを返しますか(値1だと思います)?
実際のところ、Androidカーネルはメモリのオーバーコミットを使用します(値がわからない場合は、それ(オーバーコミット値)とその重要性を知りたいと思います)。Androidのフレームワークソース(C / C ++)コードの一部(サードパーティの可能性があります)は、NULLをチェックせず、割り当て後にbad_allocをキャッチしません。私は何かが足りないのですか?
オーバーコミットメモリに関してSOにはいくつかのスレッドがありますが、それらのどれも私の混乱を解決しませんでした。
編集:積極的なオーバーコミットが採用されている場合、NULLは返されません(仮定1)。使用可能な物理メモリがなく、割り当てられたメモリにアクセスしようとすると(割り当てられたメモリに書き込む)、OOMはプロセスを強制終了し、アプリケーションが強制終了されるまでメモリをアプリケーションに割り当てます(仮定2)。どちらの場合でも、NULLをチェックする必要はありません(メモリが割り当てられるか、プロセスが強制終了されます)。私は私の仮定に正しいですか?
移植性はこの質問の問題ではありません。
c++ - gdb入力/出力エラーAndroidへのリモートデバッグ
ネイティブコードを呼び出してGLレンダリングを行うAndroidアプリをデバッグしようとしています。ネイティブコードは、私が移植しようとしている既存のコードです(そして、私はそれをよく知りません)。既存のコードを正しくコンパイル、リンク、およびインストールし、Javaコードから正しく呼び出されているそのコードを呼び出すネイティブ関数をいくつか持っています。追跡しようとしているセグメンテーション違反が発生し、gdbでプログラムにブレークポイントを設定する際に問題が発生します。これは、Cygwinを搭載したWindows XPで発生します。おそらく、まだgdbを学習していることをお伝えしておきます。
http://honeypod.blogspot.com/2008/01/debug-native-application-for-android.htmlの指示から始めました。これが私が現在行っていることです。
エミュレーターでアプリを起動します。
cmdプロンプトの場合:
cygwinシェルの場合:
したがって、ブレークポイントは正常に設定され、シンボルは正常であるように見えますが、ブレークポイントを挿入しようとしたときにアドレスが間違っている可能性があります。上記のWebページからさまざまなコマンドのバリエーションをいくつか試しましたが、これまでのところうまくいきません。
何が起こっているのかアイデアはありますか?
ありがとう
android - Android: ndk を使用して C++ コードからゲーム アセット ファイルを読み取れるようにする方法
irrlicht c++ 3D グラフィックス エンジン ポートを Android プラットフォームに使用してゲームを作成しています。グラフィックエンジンは c++ で書かれています。C++ コードからメッシュやテクスチャなどを読み込めるようにする必要があります。私の現在の計画は、すべてのゲーム アセット ファイルを res/raw ディレクトリまたは assets ディレクトリに配置し、起動時にこれらのファイルを SD カードにコピーして、irrlicht C++ コードからアクセスできるようにすることです。これは、ゲーム メディア ファイルを C++ からアクセスできるようにするための最良の方法ですか?
java - JNIアプリケーションの状態
JNIを介してメソッドにアクセスする場合、状態はどのように保持されますか?以下の例では、JavaコードがネイティブメソッドdrawFromJniを呼び出していますが、ネイティブクラス_ncは呼び出し間で永続化されますか?
NDK用のより優れたネイティブデバッグツールがあれば、これを見つけるのは非常に簡単ですが、NDKとC++に本当に問題があります。
android - Androidアプリのメモリフットプリントを確認するにはどうすればよいですか?
さて、タイトルはそれを言います。
まだ使用可能なメモリの数を知ることも便利です。(ネイティブコードで)ランダムにクラッシュする傾向のあるメモリを大量に消費するアプリケーションを作成していますが、メモリが不足しているのではないかと疑っています。
c++ - Android は C++ 側から raw オーディオを再生します
Android システムの C++ 側でカスタム ファイル形式からオーディオをストリーミングできる必要があります。カスタム メディア プレーヤーの移植に取り組んでおり、カスタム ファイルを開いてそこからオーディオをストリーミングできるようにする必要があります。プレーヤー全体を Java に移植することはパフォーマンスの観点からは実現可能ではなく、JNI インターフェイスを介してオーディオ バッファーを移動するのは遅すぎて適切なフレーム レートを維持できないため、これは重要です。OpenGL ES を介して NDK 側でビデオを処理できますが、これを実現する方法がわかりません。
c++ - コール スタックから関数名を取得する
ネイティブ コードを呼び出す Android プログラムに取り組んでいます。そのネイティブ コードはセグメンテーション違反であり、Android NDK を介してデバッグを機能させることは実際には不可能であるため、次のようなコールスタックが残っています (ddms から取得)。私の質問は、コールスタックのメモリアドレスを関数名に変換するために事後に手動で実行できるものがあるかどうかです。これにより、これがセグメンテーション違反の場所を確認できます。
ありがとう
android - Android NDK-ストレートARMコードをサポートしますか、それともThumbだけをサポートしますか
私は私たちの製品のAndroidプラットフォームを評価するように頼まれました、そして私はさまざまなオプションを見ています、私はちょうど今表面を引っ掻いているだけです、そして私を悩ませている1つのことはコードをまっすぐなARMコードとしてコンパイルする方法を見ることができないということです(Thumbなし)、Thumbの実行速度が遅く、コードの主要なセクションでパフォーマンスが必要になることはわかっています。
ファイルのフラグを設定するだけでよいと思いますが、それを機能させることはできません...-march
LOCAL_CFLAGS
Android.mk
誰か助けてもらえますか?
java - Objective-C と Android
Android 向けの比較的大規模なプロジェクトを終えたところですが、太陽系のこちら側にある最もユビキタスなハンドセットの 1 つ (あのフルーティな小さな携帯電話によるもの) では決して動作しないことを知って、口に苦味を残しました。クラブ)。
そのため、次のプロジェクトでは、ほとんどのコンポーネントを iPhone と Android プラットフォーム間で簡単に移動できるように記述したいと考えています。私が考えている方法は、ほとんどを Objective-C でコーディングしてから、プラットフォーム固有の部分をさらに Objective-C と Java でそれぞれ追加することです。Android 側では、NDK を使用する必要があります。
私の C の知識は十分ですが、Objective-C の知識はゼロに近く、C++ を学びたいとは思いません。上記のアプローチはどれほど正気で、より良いアプローチはありますか? Java でコーディングして、ハッキングされていない iPhone 市場に参入する方法はありますか? そして、私の知っている人々 (iPhone ユーザー) が来年までに Android フォンを持っている可能性はどのくらいあるでしょうか?
android - Cygwin と NDK で「エラー: 有効な GNU Make 実行可能ファイルが見つかりませんでした」
私はNDKが初めてです。(Windows を使用)。cygwin と NDK をダウンロードしました。で NDK を解凍しましたC:\
。cygwin を実行すると、NDK ディレクトリに移動し、コマンドを実行します
しかし、私は得る:
GNU make 3.81 をダウンロードしましたが、まだうまくいきません。
GNU Make と何をしなければならないのですか? 特別なディレクトリに置くか、PATH に追加する必要がありますか?