Fetching...

-

Just a minute...

关键词:安卓开发,软件测试,错误排查。

大三下学期选修了十分重要的安卓开发课程,老师让我们编写编译书中的程序并完成书后的挑战练习。但是由于Android Studio的版本问题和gradle脚本以及主程序的命名与书中不同,这次编程还是遇到了一点坑,这迫使我上网查资料,并且认真研读资源目录和gradle的源代码,以找到出错的地方。以下是我的一些发现和遇到的一些坑:

版本要匹配

千万不要随便改变项目根目录和app目录下的build.gradle,我更改了几个参数,导致编译通过后打包失败:

1.项目根目录下的插件版本“build:gradle:3.4.1”,这个版本号不能随便改,原因是你的AS版本不一定支持对应的gradle版本和插件版本,当然,当AS更新以后,可能旧项目中的版本不能被支持,这个时候你就需要去更改以下几个地方:

(1)项目根目录下的插件版本号,这个和AS的版本应该是一致的

(2)gradle-wrapper.properties下的distributionUrl,一定要找到这个插件版本号对应的Gradle版本号,具体参考 这里

(3)下载对应的gradle版本,网址就是distributionUrl的地址。

2.在app目录下的build.gradle也涉及到一些版本的问题,一是compileSdkVersion不能小于某个值,否则会报错;二是minSdkVersion的更改可能会导致在某些手机上不适配,我曾经把minSdkVersion由16改为”R”,结果在虚拟机上就不能运行了,据网上资料说,只要把minSdkVersion值设为19以下,就可以适配95%以上的安卓手机。

3.版本不匹配会出现如下报错:

(1)Invalid escape sequence at line 1 column xx path $[0].name

(2)gradle project sync failed

(3)Could not find method google() for arguments [] on repository container

4.但是有时候报上述第3点的第(1)条错误时不一定是版本问题,若版本正确仍出现如上问题,应当考虑 开File->Setting->找到instant run(或者搜索)->取消Enable instant run。然后应用即可。

5.同样的,虚拟机版本的不同也可能导致一些问题。比如对于第三章,有的手机屏幕旋转了以后会改变设备配置,从而改变Activity生命周期,但有些却不行。在测试中,Nexus 5 API 29(Android 9+)旋转不会改变Activity生命周期,也不会改变设备配置,但Nexus 5 API 27(Android 8)会。

提示无法执行

1.遇到了一个问题,当我使用Log.d的时候安卓提示要导入android.util.log,但是无法点击,手动输入也不行,后来发现util下面用的是Log这个包,所以有时候提示也是不正确的。

类名的对应

1.在主控制器中,private static final String TAG这个字符串对应的值应该和主控制器名称对应,虽然在第一第二章的时候问题不大,但是使用logcat测试后会发现有很严重的异常报错。

覆盖@Override

1.必须调用父类的同名方法,否则报错:

Overriding method should call super.onActivityResult less… (Ctrl+F1)
Inspection info:Some methods, such as View#onDetachedFromWindow, require that you also call the super implementation as part of your method. Issue id: MissingSuperCall

中文路径

1.安卓虚拟机最好不要放在有中文的路径下,否则录屏出现如下报错:

Emulator: emulator: ERROR: FfmpegRecorder.cpp:267: Could not open [C:\Users?????.android\avd\Nexus_5_API_27.avd\tmp.webm]: Invalid argument

这些问号就是中文字符

Android Studio平台的一些问题

1.虚拟机默认装C盘,我刚刚清出的一点空间,开了三个虚拟机,结果全满了,占了我C盘一半的空间!解决方法

2.新版的Android Studio找不到DDMS, 如果只是需要查看文件,可以在View->Tools WIndows下选Device File Explorer.

LogCat过滤关键词

1.关键错误:FATAL EXCEPTION

空指针问题

在水平方向上运行安卓没问题,竖直方向运行安卓的时候程序终止,明显是布局的问题。LogCat报错如下:

2020-03-07 18:49:45.296 3434-3434/com.example.geoquiz E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.geoquiz, PID: 3434
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.geoquiz/com.example.geoquiz.MainActivity}: 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
at com.example.geoquiz.MainActivity.onCreate(MainActivity.java:54)
……

上网查资料,参考文章

先去看看布局文件里面有没有id,很有可能是因为这样导致的空指针,结果发现 不知道为什么两个button的布局代码没了, 所以找不到按钮的地址 , 形成了空指针 。

Related post
Comment
Share
  • GPT技术初探

    第一部分 引入1.概念GPT:Generative Pre-Training 生成式的预训练、 2.工作机制GPT也采用两阶段过程,第 一个阶段是利用语言模型进行预训练,第二阶段通过 Fine-tuning的模式解决下游任务。 3.G...

    GPT技术初探
  • 螺旋上升,这就是我期盼的人生

        还记得高中的时候,在政治课上学过一个“螺旋上升”理论,即“事物的发展,总是螺旋上升的”,而列宁也说过, “发展似乎是在重复以往的阶段,但它是以另一种方式重复,是在更高的基础上重复。” 回顾我这21年...

    螺旋上升,这就是我期盼的人生
  • 致即将逝去的21岁

        在即将迎来22岁的日子,我想回顾一下21岁时的一些收获与遗憾。也当是把元旦没写完的文案补上一下。     在6岁的时候,我在爷爷家曾经画过一幅画,爷爷问我在画什么,我说,...

    致即将逝去的21岁
  • ACTF2020密码学部分writeup

    编写的项目文件请参考项目链接。同时欢迎大家访问ACTF2020的所有赛题。喜欢的话请多多资瓷一下,给我们实验室的项目加个Star或者Fork,谢谢。 为了保护服务器的同时不给选手带来更多困难,密码学部分的交互题开了pow算力检测,我也...

    ACTF2020密码学部分writeup
  • 通过python脚本自动插入汇编反调试代码

    研究背景在之前OLLVM项目的研究过程中,我们发现反调试技术对反混淆脚本有一定的干扰作用,如果可以在OLLVM的中间代码中自动化插入反调试代码,那么就可以给OLLVM的代码混淆增加一层保障。 方案分析探讨多种方案以后,我认为最适合在汇...

    通过python脚本自动插入汇编反调试代码
  • 答辩顺序抽签小程序

    最近比较喜欢动手编写小程序和脚本。晚上有同学和我讨论对答辩队伍进行公平抽签的方案,所以打算编写一个很简单的小脚本,并做到尽量减少计算量。 脚本思路按照一定根据给各个队伍排序,然后初始化抽签序号池,每次随机获取池内的一个值,交给其中一支...

    答辩顺序抽签小程序
  • 课堂记录小助手

    作为一名课代表,我需要每天记录同学在QQ群的签到和回答问题情况。开始我是直接把记录复制到word里面手动提取有用的消息,最后我决定解放双手编写一个自动化处理脚本。 这个脚本需要一些什么功能呢?1.最基础的,就是从漫长的聊天记录中提取专...

    课堂记录小助手
  • 基于门限方案的条形码保密及容错技术

    关键词:门限方案,条形码保密,条形码容错,条形码认证与防伪造。 经历过初期两个小项目的探索,我们项目团队积累了一定的项目研究经验,在老师和16级学长的帮助下,我们把研究方向转到了门限方案的实际应用上。结合市面上用9张合并的条形码提高条...

    基于门限方案的条形码保密及容错技术
  • 2020新年原创脚本-其中的小把戏你清楚吗

    关键词:随机数素数生成,新年祝福小程序。 脚本创作这是我在大年三十写的一个程序,当时我正准备去伯克利交流,但由于疫情的缘故,出国变数增大,所以我就打算通过随机数“未卜先知”。以下就是我的脚本: 12345678910111213141...

    2020新年原创脚本-其中的小把戏你清楚吗
  • 基于CRT的物流信息安全处理方案

    关键词:中国剩余定理,密钥分发技术,隐私保护。 引言在2018年11月份的时候,段老师在密码学课上讲到了密钥分发协议,我当时就觉得这个协议很有意思也很有应用前景。后来老师还很主动地分享了一下它的idea,其中一部分就是有关物流单上的信...

    基于CRT的物流信息安全处理方案
Please check the parameter of comment in config.yml of hexo-theme-Annie!