2013-02-25 1 views
0

내 앱이 펌웨어 이미지로 작동하도록해야합니다. 내 응용 프로그램은 데이터/데이터/패키지/일반 응용 프로그램처럼 설치할 때 훌륭하게 작동하지만 ... 펌웨어에 포함 시키면 시작시 충돌이 발생합니다.Android 앱이 시스템 (펌웨어)에 설치되면 시작시 충돌하지만 데이터/데이터에 설치되지 않는 경우

펌웨어 앱을 처음으로 사용해 본 결과 차이점을 인식하지 못했기 때문에 Google에서 아무 것도 찾을 수 없습니다. 사실 아직 도움이되는 것을 찾지 못했습니다.

첫 번째로 파일/data/package/filesiles 파일에 대한 액세스가 의심스럽고 사용이 완전히 제거되었지만 여전히 충돌합니다. 나는 토스트를 로딩 과정에서 앱이 얼마나 멀리 가고 있는지보기 위해 넣었지만, 매번 처음으로 토스트 만하기 때문에 큰 문제가있을 것으로 예상된다.

나는 SharedPreferences와 Bundle을 모두 사용했지만 여전히 충돌이 발생합니다.

나는 전체 프로젝트를 기본적으로 꺼내 MainActivity에만 레이아웃을로드했습니다. 여전히 충돌합니다.

그냥 테스트 용으로 Hello World를 보여주고 시스템에로드하는 간단한 앱을 만들었습니다. 아무런 문제없이 시작됩니다.

내 앱은 Android NDK를 많이 사용하지만 첫 번째 액세스 전에 Toast 이벤트를받지 않기 때문에 첫 번째 사용 전에 충돌이 발생한다고 가정합니다.

내 질문 : 시스템 폴더에 설치된 응용 프로그램을 디버깅하는 방법이 있습니까? 특수 사용 권한이 필요합니까? 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 
+0

stacktrace를 게시하십시오. – JoxTraex

+0

내가 얻는 유일한 로그는 jni에 대한 첫 번째 호출이 작동한다는 것입니다 (올바른 위치에서 로그를 얻었 기 때문에). 두 번째는 실패합니다. _E/AndroidRuntime (1790) : java.lang.UnsatisfiedLinkError : 네이티브 메소드를 찾을 수 없습니다. .... 그러나 아무것도 아닙니다. – user1628803

+0

사실, UnsatisfiedLinkError는 두 번째 호출이 아니라 나중에 호출됩니다. 두 번째 호출은 오류를 throw하지 않지만 반환 값으로 지정하는 내용이 0을 반환하므로 아무 것도하지 않습니다. – user1628803

답변

0

내가 여기보고 있어요 무엇을 바탕으로 :

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

이 구현이 코드에 포함되지 않는 것을 의미한다. JNI 구현을 패키징하고 앱과 올바르게 연결하는지 확인하십시오. 또한 MyJNICall()을 호출하는 경우 코드가 있다고 가정합니다.

+0

이 함수는 존재하며 일반 앱으로 설치 될 때 호출됩니다. 펌웨어 설치와의 차이점은 무엇입니까? – user1628803

+0

JNI가 표준 앱과 관련하여 시스템 앱 내에서 처리되는 방법 일 수 있습니다. 그냥 짐작할 수 있겠 군. – JoxTraex

+0

어떻게 생각 하나? 이 경우 로그는별로 도움이되지 않습니다. JNI의 로그가없는 것 같습니다. 단지 Java뿐입니다. 처음 몇 개의 함수가 호출되었지만 실제로는 아무것도하지 않고 기본값을 반환합니다. 그런 다음 MyJNICall 함수는 처음 몇 번의 호출과 마찬가지로 정의되었지만 "찾을 수 없음"이벤트입니다. 엄청 이상해. – user1628803

1

좋아, 많은 두통 후 나는 그 이유를 발견했다. system/libs에있는 네이티브 라이브러리가 설치 중에 업데이트되지 않고 다소 오래된 버전을 사용하고있었습니다. 라이브러리를 수동으로 업데이트하면 문제가 해결됩니다. 이 문제에 대해 제조업체와상의해야 할 것입니다.

관련 문제