- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这个错误快把我逼疯了。从 Google Play 商店下载时,我的应用程序在启动时崩溃并出现错误:
java.lang.ClassNotFoundException
in dalvik.system.BaseDexClassLoader.findClass
在我们的两台设备上从 eclipse 构建时,我的应用程序没有崩溃。然而一个月前,一位客户使用他的手机构建了我们的应用程序,然后它在启动时也崩溃了。当时我忽略了这个问题,因为它正在我们的设备上运行,并认为它与 Google map key 或 keystore 有关。
现在我们的应用程序从 Play 商店下载后在每台设备上都会崩溃。我知道没有一种简单的方法可以解决这个问题,但如果能朝正确的方向推进,我们将不胜感激。
我还发现很难调试这个问题,因为在我们的设备上从 eclipse 构建该应用程序时效果很好!
这是我报告的完整错误日志:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.denederlandsewateren.winkeloord/com.denederlandsewateren.views.StartScreenActivity}: java.lang.ClassNotFoundException: com.denederlandsewateren.views.StartScreenActivity
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2099)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2210)
at android.app.ActivityThread.access$600(ActivityThread.java:142)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4931)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.denederlandsewateren.views.StartScreenActivity
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2090)
... 11 more
同样,除了对这个问题的直接回答外,我不会再说了,但也许有人可以通过这个错误日志来阐明这个问题。
编辑
如果有帮助的话,这里是 Manifest 文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxxx.xxxxx"
android:versionCode="1"
android:versionName="1.0" >
<permission
android:name="com.xxxxx.xxxxx.MAPS_RECEIVE"
android:protectionLevel="signature" />
<permission
android:name="com.xxxxx.xxxxx.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="my_app_package.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.xxxxxx.xxxxx.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:theme="@style/Theme.Sherlock" >
<service android:name="com.xxxxxx.xxxxx.GCMIntentService" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="xxxxxxxx" />
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.xxxxxx.xxxxxxx" />
</intent-filter>
</receiver>
<activity
android:name="com.xxxxx.xxxxx.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<!--<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter> -->
</activity>
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/app_id" />
<activity android:name="com.facebook.LoginActivity" >
</activity>
<activity
android:name="com.xxxxxx.xxxxxx.StartScreenActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
编辑
添加了在设备上安装应用程序时的详细日志
03-30 17:56:28.554: D/dalvikvm(5150): GC_FOR_ALLOC freed 233K, 68% free 2639K/8195K, paused 13ms, total 13ms
03-30 17:56:28.574: I/dalvikvm-heap(5150): Grow heap (frag case) to 26.682MB for 16777232-byte allocation
03-30 17:56:28.594: D/dalvikvm(5150): GC_CONCURRENT freed <1K, 23% free 19022K/24647K, paused 2ms+9ms, total 21ms
03-30 17:56:29.114: D/dalvikvm(5150): GC_FOR_ALLOC freed 0K, 23% free 19022K/24647K, paused 15ms, total 15ms
03-30 17:56:29.129: I/dalvikvm-heap(5150): Grow heap (frag case) to 35.681MB for 9437200-byte allocation
03-30 17:56:29.169: D/dalvikvm(5150): GC_CONCURRENT freed 0K, 17% free 28238K/33927K, paused 2ms+2ms, total 38ms
03-30 17:56:29.254: D/libEGL(5150): loaded /system/lib/egl/libEGL_mali.so
03-30 17:56:29.259: D/libEGL(5150): loaded /system/lib/egl/libGLESv1_CM_mali.so
03-30 17:56:29.259: D/libEGL(5150): loaded /system/lib/egl/libGLESv2_mali.so
03-30 17:56:29.284: D/OpenGLRenderer(5150): Enabling debug mode 0
03-30 17:56:32.154: D/KEY(5150): UUID
03-30 17:56:32.179: I/System.out(5150): UUID: xxxxxxxxxxxxxx
03-30 17:56:32.179: E/SerializeObject(5150): FileNot Found in ReadSettings filename = xxxxx.dat
03-30 17:56:32.184: D/GCMRegistrar(5150): resetting backoff for com.xxxxx.xxxxx
03-30 17:56:32.214: V/GCMRegistrar(5150): Registering app com.xxxxx.xxxxx of senders 752727514714
03-30 17:56:32.214: D/KEY(5150): pushEnabled
03-30 17:56:32.324: V/SlidingMenu(5150): setting padding!
03-30 17:56:32.394: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.394: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.394: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.409: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.414: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.414: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.424: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.424: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.429: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.434: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.434: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.434: W/AllCapsTransformationMethod(5150): Caller did not enable length changes; not transforming text
03-30 17:56:32.459: V/CustomViewBehind(5150): behind INVISIBLE
03-30 17:56:36.894: D/dalvikvm(5150): GC_CONCURRENT freed 20031K, 58% free 15574K/36551K, paused 4ms+7ms, total 49ms
03-30 17:56:36.894: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 31ms
03-30 17:56:37.504: I/System.out(5150): VaarApp ID: 5
03-30 17:56:37.534: I/Choreographer(5150): Skipped 122 frames! The application may be doing too much work on its main thread.
03-30 17:56:37.539: V/GCMBroadcastReceiver(5150): onReceive: com.google.android.c2dm.intent.REGISTRATION
03-30 17:56:37.544: V/GCMBroadcastReceiver(5150): GCM IntentService class: com.xxxxx.xxxxx.GCMIntentService
03-30 17:56:37.549: V/GCMBaseIntentService(5150): Acquiring wakelock
03-30 17:56:37.794: V/GCMBaseIntentService(5150): Intent service name: GCMIntentService-DynamicSenderIds-1
03-30 17:56:37.794: E/GCMRegistrar(5150): internal error: retry receiver class not set yet
03-30 17:56:37.794: V/GCMRegistrar(5150): Registering receiver
03-30 17:56:37.799: D/GCMBaseIntentService(5150): handleRegistration: registrationId = xxxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxx-xxxxx-xxxx, error = null, unregistered = null
03-30 17:56:37.799: D/GCMRegistrar(5150): resetting backoff for com.xxxxx.xxxxx
03-30 17:56:37.799: V/GCMRegistrar(5150): Saving regId on app version 1
03-30 17:56:37.829: V/GCMBaseIntentService(5150): Releasing wakelock
03-30 17:56:39.169: D/dalvikvm(5150): GC_CONCURRENT freed 2248K, 52% free 17830K/36551K, paused 6ms+12ms, total 95ms
03-30 17:56:39.169: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 12ms
03-30 17:56:39.174: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 48ms
03-30 17:56:41.164: I/dalvikvm(5150): Jit: resizing JitTable from 4096 to 8192
03-30 17:56:42.229: D/dalvikvm(5150): GC_CONCURRENT freed 4265K, 49% free 18778K/36551K, paused 3ms+6ms, total 58ms
03-30 17:56:42.229: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 41ms
03-30 17:56:42.234: D/dalvikvm(5150): WAIT_FOR_CONCURRENT_GC blocked 46ms
03-30 17:57:51.759: D/dalvikvm(5150): GC_CONCURRENT freed 5476K, 49% free 18775K/36551K, paused 21ms+6ms, total 196ms
最佳答案
所以确实是 ProGuard 从我的项目中剥离了代码。我使用 ActionBarSherlock 和 facebook,这是我添加的,所以它可以工作:
# ActionBarSherlock
-keep class android.support.** { *; }
-keep interface android.support.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
# Keep line numbers to alleviate debugging stack traces
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
这适用于 Facebook:
-keepclassmembers class * implements java.io.Serializable
{
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
关于dalvik.system.BaseDexClassLoader.findClass 中的 java.lang.ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15686593/
我试图找到一个具有“active”类的元素,然后回显它具有的其他类,并且仅选择字符串的开头。 HTML: Auto BTN Pro BTN
我发现了以下片段: jobjectArray result; int i; jclass intArrCls = (*env)->FindClass(env,"[I"); // will retu
在用于加载类的双亲委派模型中,我知道 loadclass() 是在父级上调用的,一直调用到类加载器层次结构的顶部(假设该类未加载)。此时最顶层父类加载器的 findClass 被调用。 如果没有找到这
我的 FindClass 调用有问题,它返回 null: JData::JIgZorroBridgeClass = env->FindClass(JData::IgZorroBridgePath);
我正在尝试使用 JNI 从 C++ (ms vc 2008) 调用我的 java 类,但问题是 FindClass 仅在我的 java 类中没有导入包时才起作用。如果我添加任何包(例如 java.la
我在生产构建中遇到了 ClassNotFoundException。 请在下面找到异常日志。 java.lang.RuntimeException: at android.app.LoadedApk.
我正尝试在 Android 中的一个 Java 文件上使用 FindClass,但它从未找到该类。 我使用以下代码(C++): jclass clsLocal = env->FindClass("co
在 Monodroid 中,我试图通过 JNIEnv 访问自定义 Java 类。当我在主项目中添加类时,我可以在主项目和库项目中访问它。 例如:如果 jniTest.java 是项目 A 中的 And
我在头文件中得到了 C++ 结构, struct StatusLine { static jclass Class; // Lorg/apache/http/StatusLine; s
目前在我的生产应用中我注意到这个错误: java.lang.RuntimeException: at android.app.ActivityThread.handleReceiver (Acti
我知道这是一个常见问题,我搜索了谷歌并查看了前 4 页中的所有内容,尝试了很多可能性但到目前为止没有结果。 C++代码部分: JNIEnv* create_vm(JavaVM ** jvm) {
在java原生接口(interface)中提供 jclass class = (*env)->FindClass(env,"ClassName"); 和 jclass class = (*env)->
我有一个纯 native 应用程序,因为我使用 android_native_app_glue 并且我的应用程序的入口点是 android_main(..) 我还有一个 Java 辅助类型类: p
我试图从我的 cpp 类调用我的 java 类中的一些函数。在我第四次调用函数之前,我成功地进行了三次这些调用。我正在使用 cocos2dx 引擎。 我从 MiscManagerJni.cpp 调用
我有一个简单的 java 类(“MainX”),我使用 shell 脚本和 eclipse 编译它。当我调用 env->FindClass("MainX") 函数时,从脚本生成的 MainX.clas
加载子类的正确 FindClass 标识符语法是什么?例如: package a.b.c; class Foo { class Bar { ... } } 要获取 Foo,我可以
我遇到了一个非常奇怪的 JNI 问题。谁能帮我理解这里出了什么问题? 如果我按原样运行下面的代码,我会看到: (a) 7fb6f022faf0 7fb6f022fb00 0 (b) 7fb6f022f
我正在尝试使用 JNI 从 simulink Matlab 调用 java 方法。我用 C++ 开发了一个小代码,它调用一个主要方法,该方法只在屏幕上打印 helloworld 作为第一次测试,但在它
我发现 jni 有一个关于 C 调用 Java 代码的问题。环境 WIN10 JDK1.8目前我需要C++代码来调用Java代码。起初我写了一个成功的demo。代码如下: public class S
我正在开发一个项目,其中一些 Java 函数必须使用 JNI 从 C++ 代码中调用。我已经尝试使用一个简单的 Java 类,但是当我开始在我的 Java 项目中使用额外的 .jar 时,JNI 的
我是一名优秀的程序员,十分优秀!