0

我必须让我的应用程序为固件映像工作。我的应用程序在像普通应用程序一样安装到数据/数据/包/...时运行良好,但是当我将它包含在固件中时,它在启动时崩溃。

这是我第一次开发固件应用程序,我不知道其中的差异,而且很难在 Google 上找到任何东西。事实上,我还没有发现任何有用的东西。

首先,我怀疑访问了文件空间 data/data/package/files 并完全删除了它的使用,但它仍然崩溃。我已经放入 Toasts 以查看应用程序在加载过程中的进展情况,但我时不时地只得到第一个 toast,所以我预计它会出现重大问题。

我还取消了对 SharedPreferences 和 Bundle 的所有使用,但它仍然会立即崩溃。

我什至基本上把整个项目都拿出来了,只给MainActivity加载了一个布局。仍然崩溃。

只是为了测试,我创建了一个简单的应用程序,它只显示一个 Hello World 并将其加载到系统中。它开始没有任何问题。

我还应该提到,我的应用程序经常使用 Android NDK,但我假设它在第一次使用之前就崩溃了,因为我没有在第一次访问之前获取 Toasts。

所以我的问题是:有没有办法调试安装到系统文件夹的应用程序?我需要任何特殊权限吗?我需要为 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 回答