美文网首页
Android-Bug收集

Android-Bug收集

作者: hahafei | 来源:发表于2017-03-09 16:41 被阅读0次

NO 1:

今天在“爸比讲故事”项目重构时遇到了这个问题,在低版本设备(SDK 18 - 4.3.1)上面死活发布不上去,还有打包也打不成功,折腾了好长一段时间,最后度娘了一下解决方案:

03-09 01:58:55.077 2713-2713/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.babi.story-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.babi.story-1, /system/lib]]
                                                     at android.app.ActivityThread.installProvider(ActivityThread.java:4882)
                                                     at android.app.ActivityThread.installContentProviders(ActivityThread.java:4485)
                                                     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4425)
                                                     at android.app.ActivityThread.access$1300(ActivityThread.java:141)
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
                                                     at android.os.Handler.dispatchMessage(Handler.java:99)
                                                     at android.os.Looper.loop(Looper.java:137)
                                                     at android.app.ActivityThread.main(ActivityThread.java:5103)
                                                     at java.lang.reflect.Method.invokeNative(Native Method)
                                                     at java.lang.reflect.Method.invoke(Method.java:525)
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                                                     at dalvik.system.NativeStart.main(Native Method)
                                                  Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.babi.story-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.babi.story-1, /system/lib]]
                                                     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
                                                     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
                                                     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
                                                     at android.app.ActivityThread.installProvider(ActivityThread.java:4867)
                                                     at android.app.ActivityThread.installContentProviders(ActivityThread.java:4485) 
                                                     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4425) 
                                                     at android.app.ActivityThread.access$1300(ActivityThread.java:141) 
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
                                                     at android.os.Handler.dispatchMessage(Handler.java:99) 
                                                     at android.os.Looper.loop(Looper.java:137) 
                                                     at android.app.ActivityThread.main(ActivityThread.java:5103) 
                                                     at java.lang.reflect.Method.invokeNative(Native Method) 
                                                     at java.lang.reflect.Method.invoke(Method.java:525) 
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
                                                     at dalvik.system.NativeStart.main(Native Method) 

解决方法:
可能是添加MultiDex分包,但未初始化的原因,在Application中重写attachBaseContext函数,对MultiDex初始化即可。
1)首先修改Gradle配置文件,启用MultiDex并包含MultiDex支持:

defaultConfig {
        multiDexEnabled true
 }

2)设置Application

public class BBApp extends Application {
    /**
     * 存储activity
     */
    private static final List<BaseActivity> mActivities = new LinkedList<BaseActivity>();

    private static BBApp mInstance;
    private static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
        context = getApplicationContext();

        // 必须在Application的onCreate方法中执行 BGASwipeBackManager.getInstance().init(this) 来初始化滑动返回
        BGASwipeBackManager.getInstance().init(this);

        // 初始化屏幕分辨率、缩放dpi
        DisplayMetrics metric = ResourceUtils.getResources().getDisplayMetrics();
        AppConstant.SCREEN_DENSITY = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
        AppConstant.SCREEN_WIDTH = metric.widthPixels; // 屏幕宽度(像素)
        AppConstant.SCREEN_HEIGHT = metric.heightPixels; // 屏幕高度(像素)

        // 启动录音播放服务
        // startService(new Intent(this, PlayService.class));
        // 初始化夜间模式
        // new ThemeInit(context);
        // 初始化开启4g下载
        init4GOpen();
        // 初始化图片
        initImageLoader();
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(base);
    }
}

NO 2:

今天在升级“爸比讲故事”项目开发工具Android Studio的gradle时,在办公司蜗牛的网速下面,最终没有升级成功,无赖,只有扛着电脑回家继续填坑。哪想又跳进了另外一个坑:

Error:Failed to open zip file.
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
Re-download dependencies and sync project (requires network)
// 升级方式
// 项目build.gradle
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        // classpath 'com.android.tools.build:gradle:2.2.0'
        classpath 'com.android.tools.build:gradle:2.3.0'
    }
}

// gradle-wrapper.properties文件
#Thu Mar 09 23:15:26 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
// distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

解决方式:
删除更目录下面的.gradle里面的对应目录下面的文件夹信息,参照下图所示:

解决方式

删除了gradle-3-3-all下面的文件夹信息后,重新启动Android Studio又可以继续愉快的玩耍了,接下来的事情就是赖心的等待着更新gradle版本吧😭😭😭😭😭😭,能不能更新成功,看人品咯。

上面的解决方式,是最屌丝也是最常见的做法,在AS Refreshing XXX project gradle的过程中,除了等待还只是等待,下面将会介绍一个更加快捷的方式,这是一天在掘金这个技术类博客app中读到的一个分享---解决 AS Gradle 一直 Buildling 或 refreshing 的问题(专治各种Rrefreshing假死状态):

要解决这类问题,需要 Gradle 和 Android Studio 关于 Gradle 配置的知识,下面先说一下 Android Studio 项目 Gradle 相关的几个概念。

#Gradle

Gradle 是一种构建项目工具。

#Gradle 插件

在项目的 build.gradle 文件中有这样一句配置:

classpath 'com.android.tools.build:gradle:2.3.0'

这里的版本是 Gradle 插件的版本而不是 Gradle 版本。每个版本插件都有对应要求最低的 Gradle 版本。

#gradle\wrapper 目录

这个目录是所在项目默认的 gradle 环境。

wrapper 是针对所在项目的,只在所在项目内起作用,没有安装在本地,否则所有的项目都使用一个 Gradle 版本,如果两个项目使用的是不同的 Gradle 版本,就没办法区别了,所以 Google 使用 gradle 插件实现了 wrapper,可以给每个项目配置需要的 Gradle 版本。

#gradle-wrapper.properties 文件

通常,建好一个新项目,该文件的内容如下:

#Fri Mar 03 15:53:44 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

前几项是 Gradle 的目录,最后一个是需要的 Gradle 版本的 Url。

#studio安装目录/gradle
这个目录是 Studio 新建项目默认使用的 Gradle 版本。

eg:Mac用户找到这个目录方式:
1)进入应用程序,找到Android Studio
2)右键“显示包内容”,进入Content文件夹下面的gradle文件夹

#C:/Users/用户名.gradle/wrapper/dists
所有的 Gradle 版本 gradle-版本号-all 或 gradle-版本号-bin 都保存在这里。

eg:Mac用户找到这个目录方式:

dists目录

解决问题

知道了上面那些概念,现在来看看怎样解决问题。

出现这种问题的原因是 Android Studio 在为我们下载需要的 Gradle,而由于网络不好还是 Studio 下载东西本身就慢的原因导致我们等很长时间,最终放弃,重启 Studio,building,重启 Studio...

有两种情况:
1)Studio 版本升级,需要升级默认的 Gradle
2)gradle-wrapper.properties 文件中的 distributionUrl 指向的 Gradle 版本,本地不存在

问题 1 解决方案

1.等,pass,有时候下载不下来等再长时间也是白玩。
2.打开 C:\Users\用户名.gradle\wrapper\dists 目录,进入到最新的 Gradle 目录里。
如升级 Studio 需要 gradle-3.3-all 版本。那么用浏览器访问 https://services.gradle.org/distributions/gradle-3.3-all.zip 下载 gradle3.3-all 版本压缩包,进入 C:\Users\用户名.gradle\wrapper\dists\gradle-3.3-all\55gk2rcmfc6p2dg9u9ohc3hw9 目录中,删除除 gradle-3.3-all.zip.lck 文件外的所有文件夹和文件,复制浏览器下载好的 gradle-3.3-all.zip 到该目录,重新打开 Studio 即可。

问题 2 解决方案
1.查看 gradle-wrapper.properties要求的 Gradle 版本,去 C:\Users\用户名.gradle\wrapper\dists目录中看看对应版本目录下有没有对于 Gradle 版本的 zip包,没有的话,下载好丢进来即可,和问题 1 的解决方案一样。

2.因为 Studio 项目默认使用项目中的 Gradle 版本,即 gradle-wrapper.properties
文件配置的 Gradle 版本。我们下载不到 Gradle 的时候,可以给当前项目设置本地存在的 Gradle 版本。


gradle_setting.pnggradle_setting.png

这时候可能会报错:
Error:(1, 0) Minimum supported Gradle version is 3.3. Current version is 3.2.

这是因为给本项目配置的 Gradle 版本没有达到 classpath 'com.android.tools.build:gradle:2.3.0' gradle 插件要求的最低版本,插件版本改小点就行。这是 Gradle 插件各个版本的信息

#总结
出现 Gradle 一直 Buildling 或 refreshing 的问题是因为 Android Studio 在下载依赖的 Gradle 版本太慢,解决方案最好是自己下载需要的 Gradle 版本压缩包,丢进对应目录即可。

特别鸣谢Bakumon's Blog的文章,阅读这篇文章后,让我这个Android Studio小白对AS的目录结构有了一个深入的理解和认识。

NO 3:

相关文章

  • Android-Bug收集

    NO 1: 今天在“爸比讲故事”项目重构时遇到了这个问题,在低版本设备(SDK 18 - 4.3.1)上面死活发布...

  • Android-bug定位与分析

    出现bug时的工作流程https://www.cnblogs.com/laly/p/5282796.htmlhtt...

  • 收集

    作者:伍劭颖 9岁 海边收集沙子 天空收集云 秋天收集丰收 老师收集作业本 间谍收集情报 医生收集健康 相机收集照...

  • Java虚拟机04--垃圾收集器

    垃圾收集器Serial收集器ParNew收集器Parallel Scavenge收集器Parallel Old收集...

  • 好用的作业收集小程序|视频作业收集、图片作业收集、文档作业收集、

    收集学生作业,例如视频作业收集、图片作业收集、文档作业收集、文字作业收集。收集管理起来很不方便,每次都需要花...

  • 《收集》

    天空喜欢收集云朵, 大海喜欢收集小溪, 花朵喜欢收集颜色, 树木喜欢收集阳光, 而我, 喜欢收集你的微笑!

  • 爱收集 |图片收集!

  • 收集东,收集西

    每个人都有自己喜欢收集的东西。 我喜欢收集花色各异、长短不一的袜子; 袜子收集大大小小的脚; 脚收集不同的路; 我...

  • 收集春天,收集美

    满眼都是花,满眼都是美,这感觉真好! 真想躺在树杈上,做个美梦。睁开眼就是花,闭上眼还是花。 我想变成一朵花,和满...

  • 你不是一个人,而是一类人

    信息收集整理转化速度信息收集整理转化速度信息收集整理转化速度信息收集整理转化速度信息收集整理转化速度信息收集整理转...

网友评论

      本文标题:Android-Bug收集

      本文链接:https://www.haomeiwen.com/subject/fqxggttx.html