应用更新后获取Android ClassNotFoundException

时间:2016-09-13 15:20:17

标签: android service classnotfoundexception android-alarms android-proguard

我正在尝试将我的库项目与其中一个应用程序集成,并获得以下异常,如下所示,

E/AndroidRuntime(21990): FATAL EXCEPTION: IntentService[SchedulingService]
E/AndroidRuntime(21990): Process: com.newton.message, PID: 21990
E/AndroidRuntime(21990): java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = com.app.library.database.a$a)
E/AndroidRuntime(21990):    at android.os.Parcel.readSerializable(Parcel.java:2384)
E/AndroidRuntime(21990):    at android.os.Parcel.readValue(Parcel.java:2203)
E/AndroidRuntime(21990):    at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)
E/AndroidRuntime(21990):    at android.os.BaseBundle.unparcel(BaseBundle.java:221)
E/AndroidRuntime(21990):    at android.os.Bundle.getParcelable(Bundle.java:755)
E/AndroidRuntime(21990):    at android.content.Intent.getParcelableExtra(Intent.java:5214)
E/AndroidRuntime(21990):    at com.app.library.AlarmSchedulingService.onHandleIntent(Unknown Source)
E/AndroidRuntime(21990):    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
E/AndroidRuntime(21990):    at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(21990):    at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime(21990):    at android.os.HandlerThread.run(HandlerThread.java:61)
E/AndroidRuntime(21990): Caused by: java.lang.ClassNotFoundException: com.app.library.database.a$a
E/AndroidRuntime(21990):    at java.lang.Class.classForName(Native Method)
E/AndroidRuntime(21990):    at java.lang.Class.forName(Class.java:309)
E/AndroidRuntime(21990):    at android.os.Parcel$2.resolveClass(Parcel.java:2370)
E/AndroidRuntime(21990):    at java.io.ObjectInputStream.readEnumDescInternal(ObjectInputStream.java:1551)
E/AndroidRuntime(21990):    at java.io.ObjectInputStream.readEnumDesc(ObjectInputStream.java:1532)
E/AndroidRuntime(21990):    at java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1577)
E/AndroidRuntime(21990):    at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:767)
E/AndroidRuntime(21990):    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1983)
E/AndroidRuntime(21990):    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1940)
E/AndroidRuntime(21990):    at android.os.Parcel.readSerializable(Parcel.java:2378)
E/AndroidRuntime(21990):    ... 10 more
E/AndroidRuntime(21990): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.app.library.database.a$a" on path: DexPathList[[zip file "/data/app/com.cube26.osp.message-2/base.apk"],nativeLibraryDirectories=[/data/app/com.cube26.osp.message-2/lib/arm, /vendor/lib, /system/lib]]
E/AndroidRuntime(21990):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/AndroidRuntime(21990):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/AndroidRuntime(21990):    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
E/AndroidRuntime(21990):    ... 20 more
E/AndroidRuntime(21990):    Suppressed: java.lang.ClassNotFoundException: com.app.library.database.a$a
E/AndroidRuntime(21990):        at java.lang.Class.classForName(Native Method)
E/AndroidRuntime(21990):        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
E/AndroidRuntime(21990):        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
E/AndroidRuntime(21990):        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/AndroidRuntime(21990):        ... 21 more
E/AndroidRuntime(21990):    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
E/SQLiteLog(21767): (284) automatic index on view_events(_id)

图书馆使用情况:

我的应用程序中有一个AlarmScheduling任务,我将数据一天发布到服务器上。

用例:

  1. 我已经在Playstore中有一个应用程序,如果我尝试更新我的库并将其作为新版本发布,那么如果我更改了AlarmSchedulingTasks的系统时间,我就会遇到此崩溃。

  2. 如果我清除数据或重启设备,该应用程序正常运行。我也能够成功执行我的AlarmScheduling任务。

  3. 我尝试了什么:

    我几乎尝试了SO中列出的所有可能的解决方案,如下所示:

    Android Studio: ClassNotFoundException

    Java.lang.ClassNotFoundException after Android studio update

    java.lang.ClassNotFoundException: Didn't find class on path: dexpathlist

    Android ClassNotFoundException: Didn't find class on path

    Android ClassNotFoundException: Didn't find class on path

    ClassNotFoundException after starting app

    1. 清单包名称合并问题。

    2. 在正确版本的Android studio中使用。 (即不稳定版的金丝雀频道)

    3. Gradle构建版本与库和应用项目不匹配。

    4. 达到了计数限制的App方法。

    5. 创建多个dex时的Proguard构建问题。

    6. 还发现了一些奇怪而无用的解决方案,比如清理项目,将lib文件夹重命名为libs,删除.idea,Intellij相关文件夹。

    7. 多次出现库项目缓存。

    8. 具有可序列化或可分配意图的警报计划任务的行为。 (如果我清除数据,可能会出现问题但工作正常)

    9. 我尝试了一切,但无法解决这个问题。因此,我完全陷入困境,无法将下一个版本发布到游戏商店。任何类型的解决方案和提示对我都非常有帮助。提前致谢。我发布了我的代码供您参考,如下所示

      AlarmSchedulingServiceTest.java

      public class AlarmSchedulingServiceTest extends IntentService {
          private DBAccess mDBAccess;
      
          public AlarmSchedulingServiceTest() {
              super("SchedulingService");
          }
      
          @Override
          protected void onHandleIntent(Intent intent) {
      
              CLog.i(Constants.LOG_TAG_LIBRARY," $$$ ALARM INITIATED $$$");
      
              if(intent != null) {
      
                  Bundle bundle = intent.getParcelableExtra(Constants.BUNDLE.SEND_MODE);
      
                  int mode = bundle.getInt(Constants.INTENT.SEND_MODE);
      
      
      
                  sendData();
              }
      
          }
      

      AlarmReceiver.java

      public class AlarmReceiver {
          private AlarmManager alarmMgr;
          private PendingIntent alarmIntent;
          private Intent mIntent;
      
      
          public void setAlarm(Context context, int mode) {
              alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
              mIntent = new Intent(context, AlarmSchedulingServiceTest.class);
      
      
              Bundle bundle = new Bundle();
      
      
              bundle.putInt(Constants.INTENT.SEND_MODE,mode);
              mIntent.putExtra(Constants.BUNDLE.SEND_MODE, bundle);
      
              alarmIntent = PendingIntent.getService(context, mode, mIntent, PendingIntent.FLAG_UPDATE_CURRENT);
      
              alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                              (long) 1 * 24 * 60 * 60 * 1000),
                              (long) 1 * 24 * 60 * 60 * 1000), alarmIntent);
      
          }
      
      }
      

0 个答案:

没有答案