Android-Bug收集

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.png
gradle_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:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容