Android开发 常见异常和解决办法(一)

CuterCorley 等级 763 0 0

Android Studio是Android开发的理想工具,但是由于版本的更新和配置的差异,会出现很多问题,下面是以《第一行代码 第二版》为基础进行开发学习可能遇见的一些问题及其解决办法。

1.Android Studio 3.0及以上版本找不到Android Device Monitor:

解决办法: (1)在Android Studio中打开终端,如下: Android开发 常见异常和解决办法(一) (2)跳到SDK目录下的tools目录 Android开发 常见异常和解决办法(一) 查看SDK的目录可以在设置中依次找到:File → Settings → Appearance & Behavior → System Settings → Android SDK Android开发 常见异常和解决办法(一) (3)执行monitor命令 Android开发 常见异常和解决办法(一) 即出现以下弹窗 Android开发 常见异常和解决办法(一) 即可进行需要的操作。 在网上出现的解决此问题的方法一般是在CMD中解决,但是会出现问题,如 Android开发 常见异常和解决办法(一) 可能是由于在Studio外部的命令行没有打开的权限,所以最好在Studio自带的命令行打开。

2.在Android Device Monitor无法打开文件读取权限

在第1部分中打开Android Device Monitor并点开File Explorer是不能读取文件的,如下: Android开发 常见异常和解决办法(一) 因为进行了权限设置,需要先打开权限,步骤如下: (1)打开cmd (2)在platform-tools路径下输入adb shell,回车(adb.exe位于SDK目录下的platform-tools文件夹下,如下图): Android开发 常见异常和解决办法(一) (3)输入su,回车 (4)输入chmod 777 /data, 回车(该步骤设置data文件夹权限为777(drwxrwxrwx),也即administrators、power users和users组都有对该文件夹的读、写、运行权限) (5)输入chmod 777 /data/data 回车(该步骤设置/data/data文件夹权限为777,依次类推) 此类方法是逐渐往下设置,很麻烦。 有一种更为简洁的方法,直接在platform-tools路径下输入adb root,即可获取所有文件夹权限。

打开权限后效果如图 Android开发 常见异常和解决办法(一) 如需要导出数据,如图 Android开发 常见异常和解决办法(一) 直接点击所框PULL按钮,可能会出现如下报错 Android开发 常见异常和解决办法(一) 此时重新选择一下 Android Device Monitor 左侧面板的设备,即能解决。 Android开发 常见异常和解决办法(一) 最后数据文件会被导入到你所指定的位置,如图 Android开发 常见异常和解决办法(一)

3.Androidstudio中添加jar包的方法

到网上下载你需要的jar包,下载下来后,将你Androidstudio中的项目视图切换为project,找到app下的libs,将你下载的jar包复制粘贴进去 Android开发 常见异常和解决办法(一) jar包复制进去后,选中你的jar包,比如我这里放了一个logback-classic-1.0.11的jar包进去,选中logback-classic-1.0.11,右键选择Add As Library,放进你的module中(要是有多个module,要注意自己要放进哪个module),然后加载同步下就可以了。 Android开发 常见异常和解决办法(一) 下图所示,说明jar包添加成功了。

Android开发 常见异常和解决办法(一)

4.Android studio卡在waiting for target device to come online

首先要保证模拟器没有打开,接下来打开模拟器 Android开发 常见异常和解决办法(一) 选择cold boot now,就可以发现模拟器已经启动,然后运行要运行的项目,就能正常显示了。 Android开发 常见异常和解决办法(一) 一定要保证模拟器没有启动的情况来这样使用,否则就会出现下面的情况: Android开发 常见异常和解决办法(一)

5.studio3以后的版本重写父类的方法出现androidx.annotation.NonNull包找不到的问题

这是androidX的问题: AndroidX 是一个新的扩展库,用于向下兼容支持,在28稳定版库将所有的v4、v7后续功能将被整合到 androidx 包中,即从 API 28(Android 9.0,Pie)开始,Google 推荐开发者从原来的各种支持库转移到一个新版本的名为 AndroidX 的支持库。 解决办法: (1)在gradle.properties文件里面添加如下代码

android.useAndroidX=true  #表示当前项目启用 androidx
android.enableJetifier=true   #表示将依赖包也迁移到androidx。如果取值为false,表示不迁移依赖包到androidx,但在使用依赖包中的内容时可能会出现问题,当然了,如果你的项目中没有使用任何三方依赖,那么,此项可以设置为false

(2)在module的gradle文件的dependencies 里面添加

dependencies { 
   implementation 'androidx.annotation:annotation:1.0.2'
}

重新同步编译即可。

6.Android Studio引用Module时报错:Unable to resolve dependency for ':app@debug/....

Android开发 常见异常和解决办法(一) 造成上图错误的可能原因有

  1. Module模块的SdkVersion高于主项目的SdkVersion;
  2. Module模块被定义为application,而不是library。

解决办法:

  1. 对于第一种情况造成的错误,我们需要统一主模块和Module模块的SdkVersion,保持SdkVersion一致。
  2. 对于第二种情况造成的错误,我们需要把Module模块定义为library: (1)打开引用的模块的build.gradle文件: Android开发 常见异常和解决办法(一) (2)修改application为library,同时删除applicationId: Android开发 常见异常和解决办法(一)

    7.Execution failed for task ':app:processDebugManifest'. Manifest merger failed with multiple errors, see logs

    在完成一个Project运行时,出现build failed的报错,就很迷茫,到底是哪里出问题了,错误提示一大堆:Android开发 常见异常和解决办法(一) 这时可点击左侧,用以显示具体运行情况和出错位置,Android开发 常见异常和解决办法(一) 出现如下所示界面 Android开发 常见异常和解决办法(一) 还是很懵逼,此时,我们找到Android Studio菜单下的Build, 选择Clean Project,等Clean Project好了之后,我们再点击ReBuild Project。 并且在项目build.gradle(app)中添加 allprojects { gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" } }} 显示出详细错误位置,此时再运行即可查看错误出在什么地方, Android开发 常见异常和解决办法(一) 大意是说,在app里的Manifast配置文件和ocr_ui中的Manifast配置文件的参数出现冲突,改成一致即可(这里的ocr_ui是和app同级的文件夹,用来实现特定UI效果) 修改之后再运行,成功build, Android开发 常见异常和解决办法(一)

    8.Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

    是在点击Button组件时出现的,详细错误如下,
java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx.OCRActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
...
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
...

意思大概是说调用了一个空对象的不存在的方法,但是我的Button明明是存在的啊,为什么会这样呢? 原来是因为在Project中有多个活动,一个MainActivity和其他活动,我这个Button是在其他活动,这里是在OCRActivity中调用的,每个活动都有一个对应的.xml文件,来对里面的组建进行布局,所以每个活动都必须用setContentView()方法设置自己对应的布局,但是由于疏忽,把OCRActivity活动的对应布局文件也设成了activity_main,所以导致在生成OCRActivity的时候在activity_main.xml中找不到Button对应的布局,才会报错,在setContentView()方法中的参数改为activity_ocr即可正常运行。 Android开发 常见异常和解决办法(一) 如图,出现这样的提示信息即表明在活动间正常切换了,对APP的操作也可正常进行,如此便可以在不同活动中随意切换了。 这个小异常也告诉我们在Android开发的时候要兼顾各方面,从活动到布局,再到配置,包括外部包的引入都要统一、匹配,各个活动、组件、之间的调用,以及与系统的交互等等,都要格外细心,甚至代码有时错一个字母、大小写不服,都会导致很大的问题,所以一定要谨慎、谨慎、再谨慎,细心、细心、再细心!!!

9.解决android.os.NetworkOnMainThreadException

在Android开发时,因为代码没有问题但总是报错。最后查阅资料了解到,在Android 4.0以上,网络连接不能放在主线程上,不然就会报错android.os.NetworkOnMainThreadException。但是4.0下版本不会报错。 官方解释为 Android开发 常见异常和解决办法(一) 在Android4.0以后,会发现,只要是写在主线程(就是Activity)中的HTTP请求,运行时都会报错,这是因为Android在4.0以后为了防止应用的ANR(Aplication Not Response)异常,Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。 解决此问题有两种方法:

(1)可以在Activity的onCreate()方法中加入一段代码,适用于网络请求数据量很小的情况,如下

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

(2)启动一条子线程进行你的网络请求(推荐使用)

// Android 4.0 之后不能在主线程中请求HTTP请求
new Thread(new Runnable(){
    @Override
    public void run() {
        cachedImage = asyncImageLoader.loadDrawable(imageUrl, position);
        imageView.setImageDrawable(cachedImage);
    }
}).start();

10.Android stdio 引用so错误问题:Could not get unknown property 'jniLibs' for source set 'main' of type

在Android studio 中为了让目录结构中显示出libs对应的目录结构如下: Android开发 常见异常和解决办法(一) 需要在模块对应的build.gradle 文件中添加如下配置:

sourceSets{
    main{
        jniLibs.srcDirs = ['libs']
    }
}

但是,添加完成后依然报错:

Could not get unknown property 'jniLibs' for source set 'main' of type org.gradle.api.internal.tasks.DefaultSourceSet.

原因可能是这个配置放的位置不对,正确的方法如下图所示: Android开发 常见异常和解决办法(一)

本文原文首发来自博客专栏移动应用开发,由本人转发至https://www.helloworld.net/p/ga4Ta3hzOF2P,其他平台均属侵权,可点击https://blog.csdn.net/CUFEECR/article/details/102895502查看原文,也可点击https://blog.csdn.net/CUFEECR浏览更多优质原创内容。

收藏
评论区

相关推荐

Android开发 常见异常和解决办法(一)
Android Studio是Android开发的理想工具,但是由于版本的更新和配置的差异,会出现很多问题,下面是以《第一行代码 第二版》为基础进行开发学习可能遇见的一些问题及其解决办法。 1.Android Studio 3.0及以上版本找不到Android Device Monitor: 解决办法: (1)在Android Studio中打开终端,如下
理解Android.bp
介绍Android最新的编译系统 一、简介早期的Android系统都是采用Android.mk的配置来编译源码,从Android 7.0开始引入Android.bp。很明显Android.bp的出现就是为了替换掉Android.mk。再来说一说跟着Android版本相应的发展演变过程: Android 7.0引入ninja和kati
全靠这份Android知识点PDF大全,月薪30K
第一阶段:Android 基础知识回顾: 回顾Android 开发编程,深入理解Android系统原理和层次结构,深入分析Handler源码和原理; 回顾Java,C/C++,Kotlin、dart 在Android开发中必用的语言,熟悉一下几种语言混淆后的特性; 回顾Android IPC和JNI的底层原理和热更新技术回顾Native开发要点,使用C++结
Java后端部署以及与Android通信注意事项
1 概述 ==== 本文列举了一些`Android`+后端`Java`通信/部署时的问题以及注意事项,覆盖的问题包括但不限于安全组、数据库、路径等,如果各位读者的`Android`端不能正常访问`Java`后端,希望这里的解决方案能帮助到您。 2 分类 ==== 这里将问题分为三类: * `Java`端问题 * `Android`端问题 *
java编程中使用二进制进行权限或状态控制
直接看代码以及注释吧。 @Test public void main() { // PC WEB端 int pc = 1 << 0;// ...0001=1 // Android端 int android = 1 <<
2020年了,Android后台保活还有戏吗?看我如何优雅的实现!
1、引言 ======= 对于移动端IM应用和消息推送应用的开发者来说,Android后台保活这件事是再熟悉不过了。 自从Android P(即Android 8.0)出现以后,Android已经从系统层面将后台保活这条路给堵死了(详见:《[Android P正式版即将到来:后台应用保活、消息推送的真正噩梦](https://www.oschina
2020年了,Android后台保活还有戏吗?看我如何优雅的实现!
1、引言 ======= 对于移动端IM应用和消息推送应用的开发者来说,Android后台保活这件事是再熟悉不过了。 自从Android P(即Android 8.0)出现以后,Android已经从系统层面将后台保活这条路给堵死了(详见:《[Android P正式版即将到来:后台应用保活、消息推送的真正噩梦](https://www.oschina
Andriod SDK Manager国内无法更新的解决方案
由于GWF,使用android sdk manager无法更新了,另外android源码也下载不了,幸而国内有很多开源镜像,可以帮助我们解决这些问题 1\. 如何更新Android SDK Manager 设置代理host为mirrors.neusoft.edu.cn,端口为80,即可正常同步 ![](http://static.oschina.net
Android Wear来袭,极客学院全球首发破解可穿戴系统系列课程
![](http://static.oschina.net/uploads/space/2014/0403/141247_Qz6G_1582301.jpg) 3月18日谷歌公司正式宣布发布Android Wear,矛头直指可穿戴设备。 Android系统在手机、平板电脑端的统治地位已经毋庸置疑,它的延展性和易用性也一直都受业界好评,而Android We
Android+Spring Boot 选择+上传+下载文件
2021.02.03更新 ============ 1 概述 ==== 前端`Android`,上传与下载文件,使用`OkHttp`处理请求,后端使用`Spring Boot`,处理`Android`发送来的上传与下载请求。这个其实不难,就是特别多奇奇怪怪的坑,因此,就一句话, 希望各位读者能少走弯路。 2 环境 ==== * `Win10` *
Android与H5混合开发
        Android 和 H5 在移动开发应用中非常广泛。市面上很多App都是使用Android开发的,但使用Android来开发一些比较复杂附属类,提示性的页面是得不偿失的。而H5在制作炫酷动画网页方面比较给力,且具有开发速度快,更新不用依赖于App的更新,只需要服务端更新相应的页面即可,所以App和H5页面相结合就显得尤为重要。而android
Android之ClassLoader和插件
Android之ClassLoader和插件 ====================== Android中的ClassLoader本质上跟JRE中的一样,但Android的字节码格式不一样,Android下的ClassLoader不能直接加载普通的jar包,需要使用dex2jar工具中的d2j-jar2dex.bat,  把jar转换为classe
Android学习系列笔记(五)
##Android基础网络第二天 1 post方式提交数据乱码的解决 ================= 一般在公司开发客户端和服务端的编码要保持一致。 android端的默认编码是utf-8; 做url请求时需要对参数进行URLEncode编码. URL url = new URL("http://1
Android的HTTP Client
大多数联网类Android apps将使用HTTP来发送和接收数据。Android包含两种HTTP客户端:HttpURLConnection和Apache HTTP Client。它们两者都支持HTTPS,streaming上传和下载,可配置的超时,IPv6和连接池。 ### Apache HTTP Client [DefaultHttpClient](
LEADTOOLS Android的入门使用方法
**一、搭建Android开发环境** 在使用[LEADTOOLS Android](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.evget.com%2Fproduct%2F781)库和demo之前,需要根据以下步骤搭建Android开发环境: 1、安装Java Develop