0

ファームウェア イメージでアプリを動作させる必要があります。私のアプリは、通常のアプリのように data/data/package/... にインストールするとうまく動作しますが、ファームウェアに含めると起動時にクラッシュします。

ファームウェア アプリで作業するのはこれが初めてで、違いを認識しておらず、Google で何かを見つけるのは非常に困難です。実際、私はまだ役立つものを見つけていません。

最初に、ファイルスペース data/data/package/files へのアクセスを疑い、その使用を完全に削除しましたが、それでもクラッシュします。アプリの読み込みプロセスがどこまで進んでいるかを確認するためにトーストを入れましたが、時々最初のトーストしか表示されないので、大きな問題があると思います.

また、SharedPreferences と Bundle の使用をすべて削除しましたが、それでもすぐにクラッシュします。

基本的にプロジェクト全体を取り出して、レイアウトを MainActivity にロードしただけです。それでもクラッシュします。

テストのために、Hello World のみを表示する単純なアプリを作成し、システムにロードしました。問題なく起動します。

また、私のアプリは Android NDK をよく使用しますが、最初のアクセスの前にトーストを取得しないため、最初の使用の前にクラッシュすると想定しています。

私の質問: システム フォルダーにインストールされたアプリをデバッグする方法はありますか? 特別な許可が必要ですか? ndk に「ファームウェア」を指定する必要がありますか? 一般に、システム アプリを作成するときに注意する必要がある違いは何ですか?

ここでスタックトレース:

02-26 09:40:42.041: E/Trace(1790): error opening trace file: No such file or directory (2)
02-26 09:40:42.071: D/dalvikvm(1790): WAIT_FOR_CONCURRENT_GC blocked 0ms
02-26 09:40:42.241: D/dalvikvm(1790): No JNI_OnLoad found in /system/lib/libpackage.so 0x4220f7d0, skipping init
02-26 09:40:42.721: D/dalvikvm(1790): GC_FOR_ALLOC freed 568K, 6% free 13110K/13852K, paused 15ms, total 15ms
02-26 09:40:42.721: I/dalvikvm-heap(1790): Grow heap (frag case) to 16.638MB for 3850256-byte allocation
02-26 09:40:42.731: D/dalvikvm(1790): GC_FOR_ALLOC freed 30K, 5% free 16840K/17616K, paused 9ms, total 9ms
02-26 09:40:42.771: I/MainActivity(1790): ON RESUME
02-26 09:40:42.951: W/dalvikvm(1790): No implementation found for native Lcom/mypackage/MainView;.MyJNICall:()[I
02-26 09:40:42.951: D/AndroidRuntime(1790): Shutting down VM
02-26 09:40:42.951: W/dalvikvm(1790): threadid=1: thread exiting with uncaught exception (group=0x417ee7d0)
02-26 09:40:42.951: E/AndroidRuntime(1790): FATAL EXCEPTION: main
02-26 09:40:42.951: E/AndroidRuntime(1790): java.lang.UnsatisfiedLinkError: Native method not found: com.mypackage.MainView.MyJNICall:()[I
02-26 09:40:42.951: E/AndroidRuntime(1790):     at com.mypackage.MainView.MyJNICall(Native Method)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at com.mypackage.MyManager.anotherFunction(MyManager.java:43)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at com.mypackage.MainView.myMethod(MainView.java:1330)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at com.mypackage.MainView.init5(MainView.java:525)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at com.mypackage.MainActivity$LoadViewTask.onPostExecute(MainActivity.java:236)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at com.mypackage.MainActivity$LoadViewTask.onPostExecute(MainActivity.java:1)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at android.os.AsyncTask.finish(AsyncTask.java:631)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at android.os.Looper.loop(Looper.java:150)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at android.app.ActivityThread.main(ActivityThread.java:4833)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at java.lang.reflect.Method.invokeNative(Native Method)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at java.lang.reflect.Method.invoke(Method.java:511)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-26 09:40:42.951: E/AndroidRuntime(1790):     at dalvik.system.NativeStart.main(Native Method)
02-26 09:40:49.711: I/dalvikvm(1790): threadid=3: reacting to signal 3
02-26 09:40:49.731: I/dalvikvm(1790): Wrote stack traces to '/data/anr/traces.txt'
02-26 09:42:13.691: I/Process(1790): Sending signal. PID: 1790 SIG: 9
4

2 に答える 2

1

わかりました、多くの頭痛の種の後、私は理由を見つけました。system/libs のネイティブ ライブラリはインストール時に更新されておらず、かなり古いバージョンを使用していました。ライブラリを手動で更新すると、問題が解決しました。この問題については、メーカーと話し合う必要があります。

于 2013-02-26T08:24:57.523 に答える
0

私がここで見ているものに基づいて:

No implementation found for native Lcom/mypackage/MainView;.MyJNICall:()[I

これは、実装がコードに含まれていないことを意味します。JNI 実装をパッケージ化し、それをアプリに正しくリンクしていることを確認してください。また、呼び出している場合MyJNICall()、これはコードがそこにあることを前提としています。

于 2013-02-25T21:13:45.487 に答える