use*_*375 4 android android-studio android-gradle-plugin
如果我在我的 android 设备上安装并运行一个签名的 APK,我会收到这个错误。如果我只是编译一个应用程序并直接在设备上运行,则不会出现此错误。
似乎缺少的片段在我的项目代码中,而不是在任何外部库中。
我如何调查该错误?我试图重建,清理项目等。如果在那里创建了缺少的类,我能以某种方式在 APK 中找到吗?
hier 是错误消息:
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity
ComponentInfo{qua.com.bix/qua.com.bix.main.MainActivity}:
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 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)
Run Code Online (Sandbox Code Playgroud)
这是我的 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'
}
Run Code Online (Sandbox Code Playgroud)
更新:现在有帮助的是禁用 proguard,也添加-dontobfuscate到proguard-rules.pro. 但是,以这种方式执行此操作是一个好习惯吗?
proguard-rules.pro 现在是:
-dontobfuscate
-dontwarn org.apache.lang.**
-dontwarn com.google.common.**
-dontwarn org.joda.**
Run Code Online (Sandbox Code Playgroud)
更新 2:petey 回答了我的问题。
Proguard 正在混淆您的重要应用程序类。
将以下行添加到您的 proguard 配置文件中,以便 proguard 不会混淆您的应用程序类扩展Activity, Application, BroadcastReceiver, ContentProvider, Preference, & Fragment(支持和正常)。
# 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
Run Code Online (Sandbox Code Playgroud)
(如果您不使用其中的一些,请随意删除这些行)
然后删除这一行
-dontobfuscate
Run Code Online (Sandbox Code Playgroud)
现在有帮助的是禁用 proguard,还将 -dontobfuscate 添加到 proguard-rules.pro。但是,以这种方式执行此操作是一种好习惯吗?
如果您不关心是否有人反编译您的应用程序,这只是最佳实践。所以不行。主要是因为您希望在您的生产/发布版本中尽可能困难地完成这样的任务。特别是如果您有应用内购买 (IAP) 或处理敏感数据。
| 归档时间: |
|
| 查看次数: |
1292 次 |
| 最近记录: |