タグ付けされた質問 「android-ndk」

Android Native Development Kit(NDK)は、Android SDKのコンパニオンツールであり、アプリのパフォーマンスが重要な部分をネイティブコードで構築したり、C / C ++の既存のライブラリをAndroidに移植したりできます。C / C ++でプログラミングするときに、アクティビティの構築、ユーザー入力の処理、ハードウェアセンサーの使用、アプリケーションリソースへのアクセスなどを可能にするヘッダーとライブラリを提供します。

1
Android / ARMターゲットのDelphi XExコード生成に影響を与える方法は?
2017-05-17を更新。私はこの質問の元となった会社で働いていないため、Delphi XExにアクセスできません。私がそこにいる間、問題はFPC + GCC(Pascal + C)の混合に移行することで解決されました。NEON組み込み関数は、それが違いを生むいくつかのルーチンに使用します。(FPC + GCCは、標準ツール、特にValgrindの使用を可能にするため、強く推奨されます。)信頼できる例を使用して、Delphi XExから最適化されたARMコードを実際に生成できる方法を誰かが示すことができる場合、私は答えを受け入れます。 EmbarcaderoのDelphiコンパイラはLLVMバックエンドを使用して、Androidデバイス用のネイティブARMコードを生成します。Androidアプリケーションにコンパイルする必要があるPascalコードが大量にあり、Delphiでより効率的なコードを生成する方法を知りたいです。現在、私は自動SIMD最適化のような高度な機能についてさえ話していません。合理的なコードを生成することについてだけです。確かに、パラメーターをLLVM側に渡す方法、または何らかの方法で結果に影響を与える方法が必要ですか?通常、どのコンパイラにもコードのコンパイルと最適化に影響を与える多くのオプションがありますが、DelphiのARMターゲットは単に「最適化のオン/オフ」であり、それだけです。 LLVMは適度にタイトで実用的なコードを生成できるはずですが、Delphiはその機能を奇妙な方法で使用しているようです。Delphiはスタックを非常に多用したいと考えており、通常、プロセッサのレジスタr0〜r3を一時変数としてのみ使用します。おそらく最もクレイジーなのは、通常の32ビット整数を4つの1バイトのロード操作としてロードすることです。Delphiがより優れたARMコードを生成するようにするにはどうすればよいですか? 最初は、バイトごとの読み込みはビッグエンディアンからバイト順を交換するためのものだと思っていましたが、そうではありません。実際には、32ビットの数値を4つのシングルバイトの読み込みで読み込むだけです。*アライメントされていないワードサイズのメモリロードを行わずに、32ビット全体。(それを避けるべきかどうかは別のことであり、コンパイラのバグであることを示唆しています)* この簡単な関数を見てみましょう: function ReadInteger(APInteger : PInteger) : Integer; begin Result := APInteger^; end; 最適化がオンになっていても、アップデートパック1を適用したDelphi XE7とXE6は、その関数に対して次のARMアセンブリコードを生成します。 Disassembly of section .text._ZN16Uarmcodetestform11ReadIntegerEPi: 00000000 <_ZN16Uarmcodetestform11ReadIntegerEPi>: 0: b580 push {r7, lr} 2: 466f mov r7, sp 4: b083 sub sp, #12 6: 9002 str …

23
Android Fatal signal 11(SIGSEGV)at 0x636f7d89(code = 1)。どのように追跡できますか?
私はSIGSEGV、Androidアプリでを取得する理由を追跡することに関する他の投稿を読んでいます。Canvasの使用に関連するNullPointersを探すためにアプリを精査する予定ですが、SIGSEGV毎回異なるメモリアドレスを調べます。プラス私が見てきたcode=1とcode=2。メモリアドレスがだった場合0x00000000、私はそれがNullPointerであるという手掛かりを得るでしょう。 私が手に入れた最後のものはcode=2: A/libc(4969): Fatal signal 11 (SIGSEGV) at 0x42a637d9 (code=2) これを追跡する方法に関する提案はありますか? 私には容疑者がいますが、まだ実験に熱心ではありません。私のアプリは、オフラインマッピングにOSMDroid APIを使用しています。OverlayItemクラスは、マップ上のマーカー/ノードを表します。ネットワークを介してデータを収集し、OverlayItemに入力するサービスがあります。これは、マップに表示されます。デザインを簡略化するために、OverlayItemを自分のNodeOverlayItemクラスに拡張しました。これには、UIアクティビティとサービスで使用する追加の属性がいくつか含まれています。これにより、UIとサービスのアイテム情報が一元化されました。インテントを使用してアクティビティにブロードキャストし、何かが変更されたときにUIマップを更新しました。アクティビティはサービスにバインドし、NodeOverlayItemのリストを取得するためのServiceメソッドがあります。OSMDroid APIのOverlayItemの使用かもしれません。と私のサービスは同時にノード情報を更新します。(同時実行の問題) これを書いていると、それが本当に問題だと思います。頭痛の種は、NodeOverlayItemからNodeとOverlayItemを分けているのではなく、Serviceが保持するのは、アクティビティがノードからのデータを必要とするということです。さらに、アクティビティが作成されるとき(onResumeなど)、OverlayItemオブジェクトは、アクティビティが存在しないときにサービスが維持していたノードデータから再作成する必要があります。たとえば、アプリを起動すると、サービスがデータを収集し、UIがそれを表示し、ホームに戻ってアプリに戻ります。アクティビティは、最新のサービスノードデータからOverlayItemをプルして再作成する必要があります。 これは素晴らしい質問でも明確な質問でもありません。それは私のすべてのSOの質問がニッチまたはあいまいであるようです。誰かがこれらのSIGSEGVエラーを解釈する方法について提案があれば、それは大歓迎です! 更新これ は、デバッグセッション中にキャプチャされた最新のクラッシュです。私はこれらのデバイスのうち3つをテストに使用していますが、開発およびテスト中にすべてが確実にクラッシュするわけではありません。GCのログを記録できるように、少しだけ余分に追加しました。問題はおそらくメモリの枯渇に関連していないことがわかります。 03-03 02:02:38.328: I/CommService(7477): Received packet from: 192.168.1.102 03-03 02:02:38.328: I/CommService(7477): Already processed this packet. It's a re-broadcast from another node, or from myself. It's not a repeat broadcast though. 03-03 02:02:38.406: D/CommService(7477): …

30
エラー:接頭辞がllvmのABIのNDKツールチェーンフォルダーにツールチェーンが見つかりません
gradel(gradlew clean build)を使用してオープンソースのAndroidプロジェクト(Netguard)をコンパイルしたいのですが、次のエラーが発生しました: A problem occurred configuring project ':app'. > Exception thrown while executing model rule: NdkComponentModelPlugin.Rules#cre ateToolchains > No toolchains found in the NDK toolchains folder for ABI with prefix: llvm 私は説教をしましたが、助けとなる何かが見つかりませんでした。ここがメインbuild.gradleです: buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle-experimental:0.6.0-alpha1' } } allprojects { repositories { jcenter() …

11
Android NDKの古いバージョンはどこにありますか?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善したいですか?Stack Overflowのトピックとなるように質問を更新します。 3年前休業。 この質問を改善する 古いバージョンのAndroid NDKがどこにあるか知っていますか?私たちのコードはr6でビルドできません。確かにどこかにアーカイブされたバージョンがあるはずです。

23
Androidスタジオ、gradle、NDK
このGradle全体とAndroid Studioのサポートは初めてです。エクスポートオプションを使用してAndroidプロジェクトをGradleに変換できました。 しかし、NDKビルドをGradleビルドプロセスに統合するためのドキュメントまたは開始点を探しています。 可能であれば、ビルドバイナリ(.soファイル)をアセットディレクトリにコピーする、ある種の「後」の段階も必要です。

3
armeabiコードよりもarmeabi-v7aコードを使用する理由
現在のプロジェクトでは、複数の.soファイルを使用しています。これらは、armeabiおよびarmeabi-v7aフォルダーにあります。残念ながら、.soファイルの1つは6MBで、ファイルサイズを小さくする必要があります。ファットなAPKファイルを作成する代わりに、armeabiファイルのみを使用してarmeabi-v7aフォルダーを削除します。 NDKドキュメントによると、armeabi-v7aコードは、追加のCPU命令を含むことができる拡張armeabiコードです。これはすべて私の専門知識を超えていますが、なぜarmeabi-v7aとarmeabiの両方のコードが必要なのか疑問に思います。両方を持っている正当な理由があるに違いありませんよね? 私のテストデバイスでは、これはすべて正常に動作するようです。これらにはARM v7 CPUがあります。現在すべてが機能していると想定しても安全ですか?

30
java.lang.ClassNotFoundException:パス上のクラスが見つかりませんでした:dexpathlist
私は現在、純粋にネイティブのndkを使用する必要があるプロジェクトに取り組んでいます。Irrlichtエンジンのソースからhelloworldの例を実行しようとするとうまくいきました。次に、その例と同じ形式に従ってプロジェクトで使用してみます。しかし、私は得ました: 03-14 01:40:05.308: E/AndroidRuntime(799): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.irrlicht.example1/android.app.POMActivity}: java.lang.ClassNotFoundException: Didn't find class "android.app.POMActivity" on path: DexPathList[[zip file "/data/app/com.irrlicht.example1-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irrlicht.example1-2, /system/lib]] プロジェクトの実行中。 ここに私のmain.cppファイルがあります: #include <android/log.h> #include <jni.h> #include <android_native_app_glue.h> #include "android_tools.h" #ifdef _IRR_ANDROID_PLATFORM_ void android_main(android_app* app) { __android_log_print(4 , "pom" , "nothing"); } #endif Android.mk: LOCAL_PATH := $(call my-dir)/.. IRRLICHT_PROJECT_PATH …
139 java  android  c++  android-ndk 

30
NDK解決結果:プロジェクト設定:Gradleモデルバージョン= 5.4.1、NDKバージョンが不明なエラー
Android StudioとGradleを3.5に更新した後、次のエラーが発生します。 NDK解決結果:プロジェクト設定:Gradleモデルバージョン= 5.4.1、NDKバージョンは不明です build-gradleのGradleバージョンを3.4.2に戻しましたが、役に立ちませんでした。

15
`__android_log_print 'への未定義の参照
私のメイクファイルの何が問題になっていますか? Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := foo LOCAL_SRC_FILES := foo.c LOCAL_EXPORT_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY) foo.c #include <string.h> #include <jni.h> #include <android/log.h> #define LOG_TAG "foo" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) void test() { LOGI("test"); } ndk-build foo.c:9: undefined reference to `__android_log_print'

5
AndroidでNode.Jsを実行する
だから私はこれがかなり質問されていることを知っています。これらの質問の例で正確に言うと: AndroidでNodeJsサーバーを実行する Androidでnode.jsプロジェクトを実行するにはどうすればよいですか? そして IOS / Android上のNodeJS ただし、提示されたすべてのオプションには問題があります。 通常のデバイスで実行したいので、デバイスに別のOSをインストールしないようにしたい JXCoreでの作業は先月中止され、(おそらくその結果)コンパイルできませんでした(jxcore-cordovaをインストールできないを参照) NodeJs AnodeのAndroidポートは、2014年以降取り組んでおらず、それでも当時は実際には維持されていませんでした 私がリンクした2番目のスレッドの2番目の答えはAndroidの公式ノード配布ですが、最新のdistのBrowse-Websiteへのリンクを除いて、実際にそれを使用する方法に関する情報を見つけることができませんでした 私もこれを見ましたが、adbシェルコマンドを実行するには、デバイスをPC(または同様のもの)に接続する必要があるようですが、別のアプリとして作成したい これらの質問が投稿されて以来、「ベストオプション」としてJXCoreは現在使用できないようです 。Androidデバイスでnode.jsアプリケーション(私の場合はサーバー)を実行する方法はありますか? なぜこれが必要なのか疑問に思う場合は、Node.JsサーバーでWebAppを作成し、インターネット接続を必要とせずに電話からローカルで起動できるバージョンが必要になりました。つまり、サーバーはAndroidフォンで実行する必要があります。

4
AndroidのJNIでSIGSEGV(セグメンテーション違反)をキャッチしてスタックトレースを取得するにはどうすればよいですか?
プロジェクトを新しいAndroid Native Development Kit(JNI)に移動します。SIGSEGVが発生した場合(おそらくSIGILL、SIGABRT、SIGFPEも)、代わりに、素敵なクラッシュレポートダイアログを表示したいのですが。 (または以前に)現在発生していること:プロセスの即時の異常な終了と、OSによるプロセスの再起動の試み。(編集: JVM / Dalvik VMはシグナルをキャッチし、スタックトレースやその他の有用な情報をログに記録します。その情報をメールで送信するオプションをユーザーに提供したいだけです。) 状況は次のとおりです。私が記述していない大量のCコードが、このアプリケーション(すべてのゲームロジック)でほとんどの作業を行います。他の多くのプラットフォームで十分にテストされていますが、Androidで移植すると、ガベージをフィードし、ネイティブコードでクラッシュを引き起こすので、現在Androidログに表示されるクラッシュダンプ(ネイティブとJavaの両方)が必要です(Android以外の状況ではstderrになると思います)。私は自由にCとJavaの両方のコードを変更できますが、コールバック(JNIに出入りするコールバックの両方)の数は約40で、明らかに小さな差分にはボーナスポイントがあります。 J2SEのシグナルチェーンライブラリであるlibjsig.soを聞いたことがあります。Androidにそのようなシグナルハンドラーを安全にインストールできれば、私の疑問の一部を解決できますが、Android / Dalvikにはそのようなライブラリはありません。

2
AndroidでC ++からJavaメソッドを呼び出す
Javaがネイティブメソッドを呼び出す間に、C ++から単純なJavaメソッド呼び出しを取得しようとしています。Javaコードは次のとおりです。 public class MainActivity extends Activity { private static String LIB_NAME = "name"; static { System.loadLibrary(LIB_NAME); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) findViewById(R.id.textview); tv.setText(this.getJniString()); } public void messageMe(String text) { System.out.println(text); } public …

12
System.loadLibrary(…)が私の場合、ネイティブライブラリを見つけることができませんでした
別の Androidプロジェクトの既存のネイティブライブラリを使用したいので、NDKビルドライブラリ(libcalculate.so)を新しいAndroidプロジェクトにコピーしました。新しいAndroidプロジェクトでフォルダーを作成し、そこlibs/armeabi/にlibcalculate.soを配置しました。jni /フォルダーはありません。私のテストデバイスはARMアーキテクチャを備えています。 私のJavaコードでは、次の方法でライブラリをロードします。 static{ System.loadLibrary("calculate"); } 新しいAndroidプロジェクトを実行すると、エラーが発生しました。 java.lang.UnsatisfiedLinkError: ... nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so" したがって、エラーが言うように、コピーされたネイティブライブラリは/ verdor / libまたは/ system / libにありません。私の場合、この問題を解決するにはどうすればよいですか? (私はapkパッケージを解凍しました、lib /の下にlibcalculate.soがあります) ====更新===== また、プロジェクトルートの下にjni /フォルダーを作成し、jni /の下にAndroid.mkファイルを追加しようとしました。Android.mkの内容は次のとおりです。 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libcalculate LOCAL_SRC_FILES := libcalculate.so include $(PREBUILT_SHARED_LIBRARY) 次に、プロジェクトルートの下でndk-buildを実行しました。その後、ndk-buildによってarmeabi /およびarmeabi-v7a /ディレクトリが生成されます(フォルダー内にlibcalculate.soが含まれています)。 次に、Mavenを実行してプロジェクトを正常にビルドします。最終的なapkパッケージには、次のものがあります。 lib/armeabi/libcalculate.so lib/armeabi-v7a/libcalculate.so しかし、アプリを実行すると、同じエラーがスローされます。 java.lang.UnsatisfiedLinkError: …

3
シグナル「SIGILL」の原因は何ですか?
NDKとGCCを使用して、いくつかのC ++コードをAndroidに移植しています。コードは基本的に実行されます。ある時点で、Eclipseでデバッグするとき、呼び出し Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory; このエラーの原因: Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.) 1 <symbol is not available> 0x812feb44 どういう意味ですか?コンパイラは何らかの理由で不正なコードを生成しましたか?コンストラクターにブレークポイントがあり(何もしない)、ヒットしません。私はすでに完全な再構築を行っています。 この問題を引き起こすために私は何が間違っているのでしょうか?

4
Android Studioをバージョン1.3.0に更新した後、「現在のプラグインでのNDK統合は非推奨です」というエラーが表示されます
3日前にAndroid Studioをバージョン1.3.0に更新しました。 その前はNDKを使用できましたが、次のようなエラーが発生します エラー:(50、0)エラー:NDK統合は現在のプラグインでは非推奨です。新しい実験的なプラグインを試すことを検討してください。詳細については、http://tools.android.com/tech-docs/new-build-system/gradle-experimentalを参照してください。現在のNDK統合を引き続き使用するには、gradle.propertiesで「android.useDeprecatedNdk = true」を設定します。 プロジェクトレベルでファイルgradle.propertyが見つかりません。 このエラーを解決するにはどうすればよいですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.