android-已签名的APK中的ClassNotFoundException

android-已签名的APK中的ClassNotFoundException,第1张

概述如果我在Android设备上安装并运行签名的APK,则会收到此错误.如果仅编译一个应用程序并直接在设备上运行,则不会出现此错误.似乎丢失的Fragment在项目的代码中,而不是在任何外部库中.我该如何调查该错误?我试图重新整理,清理项目等.如果在其中创建缺少的类,我能以某种方式在APK中找

如果我在Android设备上安装并运行签名的APK,则会收到此错误.如果仅编译一个应用程序并直接在设备上运行,则不会出现此错误.

似乎丢失的Fragment在项目的代码中,而不是在任何外部库中.

我该如何调查该错误?我试图重新整理,清理项目等.如果在其中创建缺少的类,我能以某种方式在APK中找到吗?

hIEr是错误消息:

E/AndroIDRuntime: FATAL EXCEPTION: mainjava.lang.RuntimeException: Unable to start activityComponentInfo{qua.com.bix/qua.com.bix.main.MainActivity}:androID.support.v4.app.q: Unable to instantiate fragmentqua.com.bix.main.MainLoadingFragment:make sure class name exists, is public, and has an empty constructor that is public at AndroID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2295)    ....    ....    Caused by: androID.support.v4.app.q: Unable to instantiate fragment qua.com.bix.main.MainLoadingFragment: make sure class name exists, is public, and has an empty constructor that is public    ....    ....    Caused by: java.lang.classNotFoundException: DIDn't find class "qua.com.bix.main.MainLoadingFragment" on path: /data/app/qua.com.bix-1.apk    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:64)    at java.lang.classLoader.loadClass(ClassLoader.java:501)    at java.lang.classLoader.loadClass(ClassLoader.java:461)    at androID.support.v4.app.o.a(UnkNown Source)     at androID.support.v4.app.o.a(UnkNown Source) 

这是我的build.gradle

apply plugin: 'com.androID.application'androID {    compileSdkVersion 23    buildToolsversion "23.0.2"    defaultConfig {        applicationID "qua.com.bix"        minSdkVersion 15        targetSdkVersion 23        versionCode 1        versionname "1.0"        multIDexEnabled true    }    buildTypes {        release {            MinifyEnabled true            shrinkResources true            proguardfiles getDefaultProguardfile('proguard-androID.txt'), 'proguard-rules.pro'        }    }    packagingOptions {        exclude 'meta-inf/liCENSE'        exclude 'meta-inf/DEPENDENCIES'        exclude 'meta-inf/NOTICE'    }    dexOptions{        incremental true        javaMaxHeapSize "4g"    }    uselibrary 'org.apache.http.legacy'}dependencIEs {    compile 'com.androID.support:multIDex:1.0.1'    compile filetree(dir: 'libs', include: ['*.jar'])    testCompile 'junit:junit:4.12'    compile 'com.androID.support:appcompat-v7:23.1.1'    compile 'com.androID.support:design:23.1.1'    compile 'com.quadriq.qlib:qlib@aar'    compile 'com.Google.code.gson:gson:2.4'    compile 'com.Google.guava:guava:18.0'    compile 'com.Google.code.findBUGs:Jsr305:2.0.2'    compile 'com.Google.androID.gms:play-services:8.3.0'    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'    compile 'com.koushikdutta.ion:ion:2.+'    compile 'joda-time:joda-time:2.9.1'    compile 'com.github.michaelye.easydialog:easydialog:1.1'}

更新:目前有用的是禁用proguard,还向proguard-rules.pro添加了-dontobfuscate.但是,以这种方式执行此 *** 作是否是一种好习惯?

proguard-rules.pro现在是:

-dontobfuscate-dontwarn org.apache.lang.**-dontwarn com.Google.common.**-dontwarn org.joda.**

更新2:佩蒂回答了我的问题.

解决方法:

Proguard混淆了您至关重要的应用程序类别.

将以下行添加到您的proguard配置文件中,以使proguard不会与扩展Activity,Application,broadcastReceiver,ContentProvIDer,Preference和&片段(支持和正常).

# Base AndroID exclusions, required for proper function of varIoUs components-keep public class * extends androID.app.Activity-keep public class * extends androID.app.Application-keep public class * extends androID.app.Service-keep public class * extends androID.content.broadcastReceiver-keep public class * extends androID.content.ContentProvIDer-keep public class * extends androID.preference.Preference-keep public class * extends androID.support.v4.app.Fragment-keep public class * extends androID.app.Fragment

(如果您不愿意使用其中一些内容,则可以删除这些行)

然后删除此行

-dontobfuscate

What helped for Now, is disabling proguard, also adding -dontobfuscate
to proguard-rules.pro. But is it a good practice to do this in that
way?

仅当您不关心有人在反编译您的应用程序时,这才是最佳实践.所以不行.通常是因为您想在生产/发布版本中尽可能地执行这样的任务.尤其是当您拥有应用内购买(IAP)或处理敏感数据时.

总结

以上是内存溢出为你收集整理的android-已签名的APK中的ClassNotFoundException全部内容,希望文章能够帮你解决android-已签名的APK中的ClassNotFoundException所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1090101.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存