我必须让我的应用程序为固件映像工作。我的应用程序在像普通应用程序一样安装到数据/数据/包/...时运行良好,但是当我将它包含在固件中时,它在启动时崩溃。
这是我第一次开发固件应用程序,我不知道其中的差异,而且很难在 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