相同源代码的不同APK-Android

相同源代码的不同APK-Android,android,android-emulator,android-widget,android-ndk,java-native-interface,Android,Android Emulator,Android Widget,Android Ndk,Java Native Interface,所附图像显示了在两台不同机器上从同一项目生成的APK(解压缩) 正如您所看到的,两种场景中的APK内容都不同。在第二个APK edu、lib或、Android.mk、classes.dex、LICENSE.txt、pocketsphinx.i、pocketsphinx_wrap.c中不存在APK内容的差异。我不理解为什么在不同机器中使用相同代码时,APK内容会有这种差异。显然,第二个APK没有给我正确的输出,在尝试启动时,崩溃了以下日志: 01-01 00:17:13.092: DEBUG/d

所附图像显示了在两台不同机器上从同一项目生成的APK(解压缩)

正如您所看到的,两种场景中的APK内容都不同。在第二个APK edu、lib或、Android.mk、classes.dex、LICENSE.txt、pocketsphinx.i、pocketsphinx_wrap.c中不存在APK内容的差异。我不理解为什么在不同机器中使用相同代码时,APK内容会有这种差异。显然,第二个APK没有给我正确的输出,在尝试启动时,崩溃了以下日志:

01-01 00:17:13.092: DEBUG/dalvikvm(3458): Late-enabling CheckJNI
01-01 00:17:13.100: INFO/ActivityManager(2302): Start proc or.exp.voicereco for activity or.exp.voicereco/.CameraMain: pid=3458 uid=10070 gids={1015}
01-01 00:17:13.124: INFO/dalvikvm(2302): Zip is good, but no classes.dex inside, and no .odex file in the same directory
01-01 00:17:13.124: WARN/PackageManager(2302): IOException reading apk: /system/app/PocketSphinxDemo.apk
01-01 00:17:13.124: WARN/PackageManager(2302): java.io.IOException: /system/app/PocketSphinxDemo.apk
01-01 00:17:13.124: WARN/PackageManager(2302):     at dalvik.system.DexFile.isDexOptNeeded(Native Method)
01-01 00:17:13.124: WARN/PackageManager(2302):     at com.android.server.pm.PackageManagerService.performDexOptLI(PackageManagerService.java:3172)
01-01 00:17:13.124: WARN/PackageManager(2302):     at com.android.server.pm.PackageManagerService.performDexOpt(PackageManagerService.java:3157)
01-01 00:17:13.124: WARN/PackageManager(2302):     at com.android.server.am.ActivityManagerService.ensurePackageDexOpt(ActivityManagerService.java:1869)
01-01 00:17:13.124: WARN/PackageManager(2302):     at com.android.server.am.ActivityManagerService.attachApplicationLocked(ActivityManagerService.java:3876)
01-01 00:17:13.124: WARN/PackageManager(2302):     at com.android.server.am.ActivityManagerService.attachApplication(ActivityManagerService.java:4013)
01-01 00:17:13.124: WARN/PackageManager(2302):     at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:351)
01-01 00:17:13.124: WARN/PackageManager(2302):     at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:1616)
01-01 00:17:13.124: WARN/PackageManager(2302):     at android.os.Binder.execTransact(Binder.java:338)
01-01 00:17:13.124: WARN/PackageManager(2302):     at dalvik.system.NativeStart.run(Native Method)
01-01 00:17:13.131: INFO/dalvikvm(2302): Zip is good, but no classes.dex inside, and no .odex file in the same directory
01-01 00:17:13.131: INFO/ActivityManager(2302): app/or.exp.voicereco[RESUMED] app.idle/false ...realStartActivityLocked
01-01 00:17:13.131: WARN/PackageManager(2302): IOException reading apk: /system/app/PocketSphinxDemo.apk
01-01 00:17:13.131: WARN/PackageManager(2302): java.io.IOException: /system/app/PocketSphinxDemo.apk
01-01 00:17:13.131: WARN/PackageManager(2302):     at dalvik.system.DexFile.isDexOptNeeded(Native Method)
01-01 00:17:13.131: WARN/PackageManager(2302):     at com.android.server.pm.PackageManagerService.performDexOptLI(PackageManagerService.java:3172)
01-01 00:17:13.131: WARN/PackageManager(2302):     at com.android.server.pm.PackageManagerService.performDexOpt(PackageManagerService.java:3157)
01-01 00:17:13.131: WARN/PackageManager(2302):     at com.android.server.am.ActivityManagerService.ensurePackageDexOpt(ActivityManagerService.java:1869)
01-01 00:17:13.131: WARN/PackageManager(2302):     at com.android.server.am.ActivityStack.realStartActivityLocked(ActivityStack.java:601)
01-01 00:17:13.131: WARN/PackageManager(2302):     at com.android.server.am.ActivityManagerService.attachApplicationLocked(ActivityManagerService.java:3925)
01-01 00:17:13.131: WARN/PackageManager(2302):     at com.android.server.am.ActivityManagerService.attachApplication(ActivityManagerService.java:4013)
01-01 00:17:13.131: WARN/PackageManager(2302):     at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:351)
01-01 00:17:13.131: WARN/PackageManager(2302):     at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:1616)
01-01 00:17:13.131: WARN/PackageManager(2302):     at android.os.Binder.execTransact(Binder.java:338)
01-01 00:17:13.131: WARN/PackageManager(2302):     at dalvik.system.NativeStart.run(Native Method)
01-01 00:17:13.147: INFO/dalvikvm(3458): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
01-01 00:17:13.155: DEBUG/AndroidRuntime(3458): Shutting down VM
01-01 00:17:13.155: WARN/dalvikvm(3458): threadid=1: thread exiting with uncaught exception (group=0x40b021f8)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458): FATAL EXCEPTION: main
01-01 00:17:13.155: ERROR/AndroidRuntime(3458): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{or.exp.voicereco/    or.exp.voicereco.CameraMain}: java.lang.ClassNotFoundException: or.exp.voicereco.CameraMain
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1989)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at android.app.ActivityThread.access$600(ActivityThread.java:125)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1149)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at android.os.Looper.loop(Looper.java:137)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at android.app.ActivityThread.main(ActivityThread.java:4368)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at java.lang.reflect.Method.invokeNative(Native Method)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at java.lang.reflect.Method.invoke(Method.java:511)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at dalvik.system.NativeStart.main(Native Method)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458): Caused by: java.lang.ClassNotFoundException: or.exp.voicereco.CameraMain
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1873)
01-01 00:17:13.155: ERROR/AndroidRuntime(3458):     ... 11 more
01-01 00:17:13.155: WARN/ActivityManager(2302):   Force finishing activity or.exp.voicereco/.CameraMain
有人能告诉我为什么我在一台机器上编译和运行应用程序时得到了正确的输出,而不是在另一台机器上。而对于所有其他应用,生成的APK在第二台机器中是完美的

非常感谢您的帮助

问候,, 安内斯


PS:这是一个基于ndk的应用程序。

您的构建脚本/构建环境肯定有问题。我只是从这两台机器上的另一个工作应用程序复制JNI文件夹。在第一台机器中,我从eclipse构建它,在第二台机器中,我使用android源代码构建它。您是否看到任何明显的可能导致此问题的原因?显示Android.mk的内容。如果设置不正确,使用Android构建系统构建将不会创建有效的APK。很可能它只是在构建本机代码。顺便说一句,您不需要在APK中包含代码(*.c和*.i文件)。将它们与makefile一起移动到单独的目录中可能是个好主意。惯例是在app项目下使用
jni/
。与其他基于ndk的应用程序不同,我在jni/中没有Android.mk。正如我所说的,我已经将JNI目录从一个工作应用程序复制到了我创建的应用程序中。当我在eclipse中加载这个应用程序时,无论是否在/jni中使用Android.mk,它都可以完美地工作。你真的认为我应该在jni/中有一个Android.mk吗?