Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
APK错误:Android应用程序在模拟器/设备上运行良好,但当我从PlayStore下载时,该应用程序总是在启动时崩溃_Android_Parse Platform_Apk_Proguard - Fatal编程技术网

APK错误:Android应用程序在模拟器/设备上运行良好,但当我从PlayStore下载时,该应用程序总是在启动时崩溃

APK错误:Android应用程序在模拟器/设备上运行良好,但当我从PlayStore下载时,该应用程序总是在启动时崩溃,android,parse-platform,apk,proguard,Android,Parse Platform,Apk,Proguard,我的应用程序在我的模拟器上运行得非常好,当我通过手机上的usb运行它时。然而,当我从PlayStore下载它时,它在启动时崩溃了 以下是日志: java.lang.AbstractMethodError: abstract method "void android.app.Application$ActivityLifecycleCallbacks.onActivityCreated(android.app.Activity, android.os.Bundle)" at android.app

我的应用程序在我的模拟器上运行得非常好,当我通过手机上的usb运行它时。然而,当我从PlayStore下载它时,它在启动时崩溃了 以下是日志:

java.lang.AbstractMethodError: abstract method "void android.app.Application$ActivityLifecycleCallbacks.onActivityCreated(android.app.Activity, android.os.Bundle)"
at android.app.Application.dispatchActivityCreated(Application.java:190)
at android.app.Activity.onCreate(Activity.java:954)
at com.stackkedteam.feedshare.DispatchActivity.onCreate(Unknown Source)  //<--- this line is bolded in the log
at android.app.Activity.performCreate(Activity.java:6097)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2440)
at android.app.ActivityThread.access$800(ActivityThread.java:162)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5430)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:913)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)
我将包名从com.example.xxxxxx更改为com.stackkedteam.feedshare。是因为这个原因,apk不能工作吗

这是我的proguard-rules.pro:

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

-keepattributes SourceFile,LineNumberTable
-keep class com.parse.*{ *; }
-dontwarn com.parse.**
-dontwarn io.fabric.**
-dontwarn bolts.**
-dontwarn com.squareup.picasso.**
-keep class com.stackkedteam.feedshare.DispatchActivity {*;}
-keepclasseswithmembernames class * {
    native <methods>;
}

显然,根据stacktrace,您的proguard文件需要进行一些修改

-保留com.parse类。{*;} -保持类io.fabric.{*;}


因此,首先测试这些更改,看看当progurd运行时stacktrace上还剩下什么好的,所以我发现我的前面缺少了一个星号

-keep class com.parse.**{ *;}
这就是解决办法。花了很长时间才弄明白

以下是proguard文件:

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/Ben/Library/Android/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

-keepattributes SourceFile,LineNumberTable
-keep class com.parse.**{ *; }
-dontwarn com.parse.**
-dontwarn io.fabric.**
-dontwarn bolts.**
-dontwarn com.squareup.picasso.**
-keep class com.stackkedteam.feedshare.DispatchActivity {*;}
-keepclasseswithmembernames class * {
    native <methods>;
}
#在此处添加特定于项目的程序规则。
#默认情况下,此文件中的标志附加到指定的标志
#在/Users/Ben/Library/Android/sdk/tools/proguard/proguard-Android.txt中
#您可以通过更改文件来编辑包含路径和顺序
#build.gradle中的指令。
#
#有关详细信息,请参阅
#   http://developer.android.com/guide/developing/tools/proguard.html
#在此处添加任何特定于项目的保留选项:
#如果您的项目使用带JS的WebView,请取消注释以下内容
#并为JavaScript接口指定完全限定的类名
#类别:
#-keepclassmembers类fqcn.of.javascript.interface.for.webview{
#公众*;
#}
-keepattributes源文件,LineNumberTable
-保持类com.parse.*{*;}
-dontwarn com.parse**
-dontwarn io.织物**
-dontwarn螺栓**
-dontwarn com.squareup.picasso**
-保持类com.stackkedteam.feedshare.DispatchActivity{*;}
-KeepClassSwithMemberNames类*{
本地人;
}

quick question,您如何从stacktrace中判断需要修改的proguard以及proguard中需要修改的内容?我在这方面绝对是新手,文档很混乱。我测试了它,下面是应用程序崩溃时的错误日志:
java.lang.AbstractMethodError:a.a.a.c.onActivityCreated(ActivityLifecycleManager.java)在android.app.Application.dispatchActivityCreated(Application.java:209)没有实现抽象方法在com.stackkedteam.feedshare.DispatchActivity.onCreate(DispatchActivity.java:18))上的android.app.Activity.onCreate(Activity.java:956)上
-keep class com.parse.**{ *;}
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/Ben/Library/Android/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

-keepattributes SourceFile,LineNumberTable
-keep class com.parse.**{ *; }
-dontwarn com.parse.**
-dontwarn io.fabric.**
-dontwarn bolts.**
-dontwarn com.squareup.picasso.**
-keep class com.stackkedteam.feedshare.DispatchActivity {*;}
-keepclasseswithmembernames class * {
    native <methods>;
}