hitchhiker_Hitchhiker的现代Android开发指南:陷阱和隐密错误
hitchhiker
没有哪个平台或语言是完美的,每个平台或语言都有其自身的问题,陷阱和隐秘的错误。 得益于Java的传统,Android通常通过庞大的博客,论坛和stackoverflow答案数据库提供顺畅,易于学习的曲线。
在运行了两个星期并指导了Study Jam系列之后,我决定编写一组开发人员遇到的常见陷阱,这些陷阱往往是晦涩的或对Google不友好的。
错误:未找到Gradle DSL方法:“ runProguard()”可能的原因:<ul> <li>项目“ XX”可能正在使用不包含该方法的Gradle版本。<a href="open.wrapper.file">打开Gradle包装器文件</a> </ li> <li>构建文件可能缺少Gradle插件。<a href="apply.gradle.plugin">应用Gradle插件</a> </ li>
这是您在Android上可能遇到的最神秘的错误之一。 如果您一直在使用Beta版的Android Studio,则在升级到gradle版本0.14.0(Android Studio 0.9)后,您可能会/会遇到此错误。 只是Android工具团队决定将runProguard重命名为minifyEnabled。 同样,已将zipAlign启用为zipAlignEnabled。 您可以在 此处找到完整的更改列表。
错误:该项目正在使用不受支持的Android Gradle插件(XXX)版本。 推荐的版本是XXX
<a href=”fixGradleElements”>修复插件版本并重新导入项目</a>
与上一问题类似,每次您更新到Android Studio和Gradle时都会发生此问题。 与前一个不同,这可以通过单击Gradle Messages窗口中提供的Fix plugin version链接轻松解决。
android.os.NetworkOnMainThreadException
如果这是您的第一个网络通话,或者您正在更新旧的应用程序以发布Honeycomb,则可能会遇到此错误。 从4.0(Ice Cream Sandwich)开始,Android OS不允许在主(UI)线程上执行网络操作,而从第0天开始就应该这样。主线程的主要职责是顺利运行UI。 联网,文件I / O或任何其他冗长的操作都将阻止UI更新,从而导致UI / UX不稳定。 联网可能是最糟糕的,因为连接速度可能取决于许多不同的因素。
解决方案很简单。 不属于UI的任何事情都不应在主线程中完成。 Android提供了一种使用线程的简便方法,称为AsyncTask。 只需使用AsyncTask执行冗长的操作。
我使用AsyncTask,但仍收到android.os.NetworkOnMainThreadException
要启动Asynctask,您需要在Asynctask对象上调用.execute方法。 调用.doInBackground方法将绕过新线程的创建,并在主线程上运行网络操作。
java.lang.SecurityException:权限拒绝:…需要Android.permission.X
Android基于linux,每个应用程序都在其自己的沙箱中运行,并且权限非常有限。 如果需要访问公用系统资源(例如相机,蓝牙,Internet或文件系统),则需要征得用户许可。 权限被添加到清单和应用程序标签之间的AndroidManifest.xml中。 您可以参考 此完整的权限集,可以将其与uses-permission标签一起添加。 我添加了权限java.lang.SecurityException:权限拒绝:…需要Android.permission.X
拥有有效的AndroidManifest.xml并不一定意味着它可以正常工作。 在应用程序标记中添加uses-permission标记不会破坏xml结构,但也不会保留您询问的权限。 从应用程序标记中列出您的使用许可标记。
拒绝权限:…需要android.permission.WRITE_EXTERNAL_STORAGE
如果您确定查看了前两项,但仍收到错误,则应该是由于uses-permission标签内的android:maxSdkVersion =” 18”属性引起的。 要允许您的应用使用版本18以上的写入权限,您需要删除maxSdkProperty。
<uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE"/>
我的片段的溢出菜单显示不在menu.xml中的菜单项(设置)
片段可以通过重写onCreateOptionsMenu()来添加自己的菜单项。 但这并不意味着清除活动添加的菜单项。 由于片段始终由活动托管,并使用活动的上下文,因此它将从托管活动继承此类内容。 您认为不相关的项(设置作为默认菜单项给出)不属于该活动。 浏览属于该活动的menu.xml并删除不需要的项目。 FragmentTransaction类型中的方法replace或commit不适用于参数
您正在将片段对象传递给期望片段对象但仍在抱怨的方法? 好吧,并非所有片段都是相同的。 Java的设计允许名称相同的类,只要它们位于不同的程序包中即可。 Android SDK团队决定引入具有相同类名(Fragment)但使用不同包( android.support.v4.app.Fragment与android.app.Fragment)的fragment support软件包。 导航至导入并删除错误的导入,然后添加适当的导入。
不调用onOptionsItemsSelected(),onCreateOptionMenu(),afterTextChange(Editable),onPostExecute()或应调用的任何其他方法?
@Override注释必须是有史以来最被低估的注释。 它存在的原因非常特殊。 与C ++不同,每种方法在Java中都是虚拟的。 因此,除非是最终方法,否则任何方法都可以覆盖。 @Override只是检查实现是否真的覆盖了父类中的方法。 以上所有方法都有一个错字,任何级别的开发人员都可以做。 删除覆盖注释也将删除编译器检测所谓的覆盖方法中任何拼写错误的能力。 这种错别字可能出现在方法中,甚至可能出现在参数列表中。 简单地说,如果应该调用的侦听器或方法将无提示地执行失败。 您可以通过将@Override放置到每个覆盖方法中来轻松检测到此类错误。
翻译自: https://www.javacodegeeks.com/2015/03/hitchhikers-guide-to-modern-android-development-the-pitfalls-and-cryptic-errors.html
hitchhiker
hitchhiker_Hitchhiker的现代Android开发指南:陷阱和隐密错误相关推荐
- hitchhiker开发_Hitchhiker的现代Android开发指南:陷阱和隐密错误
hitchhiker开发 没有一个平台或语言是完美的,每个平台或语言都有其自身的问题,陷阱和隐秘的错误. 得益于Java的传统,Android通常通过庞大的博客,论坛和stackoverflow答案数 ...
- iphone android 开发指南 http://mobile.tutsplus.com
非常好的教程 iphone& android 开发指南 http://mobile.tutsplus.com/category/tutorials/iphone/ http://mobile. ...
- Android开发指南中文版
Android开发指南中文版 -应用程序框架 iefreer@hotmail.com 2009/9/10 个人主页: http://blog.csdn.net/iefreer 本文是对Androi ...
- Android开发指南 1──应用程序基础
登录 | 注册 译言精选 订阅 社区 译言译事 翻译答问 译言帮助 文库 原文库 译文库 全部项目 空间 控制台 个人主页 发布 发布原文 发布翻译 发布编译 发布原创 首页 商业 科技 文化 体坛 ...
- Android开发中应避免的重大错误
by Varun Barad 由Varun Barad Android开发中应避免的重大错误 (Critical mistakes to avoid in Android development) A ...
- Android开发指南(42) —— Adding Custom Suggestions
前言 本章内容为 Android开发者指南的 Framework Topics/Search/Adding Custom Suggestions章节,译为"添加自定义建议项",版本 ...
- Android开发指南(41) —— Searchable Configuration
前言 本章内容为 Android开发者指南的 Framework Topics/Search/Searchable Configuration章节,译为"搜索配置文件",版本为An ...
- Android开发指南
发现一篇很不错的文章,分享给大家,虽然有些地方翻译的有点拗口:但不影响阅读 转载自:http://www.oschina.net/translate/40-developer-tips-for-and ...
- Android开发指南!Android事件分发机制收藏这一篇就够了,2年以上经验必看
前言 现在的终端开发已经开始进入稳定期,在这个阶段大厂压力很大小厂更会收到挤压,人们使用的App越来越固定,即使是大厂,几年前平台级应用发个Push就能引流几十万,现在这些的作用也越来越小,特别到了今 ...
最新文章
- No modifications are allowed to a locked ParameterMap
- excel多元线性拟合_Python一元线性回归分析实例:价格与需求的相关性
- AsyncDisplayKit
- Python-OpenCV 笔记6 -- 轮廓(Contours)
- 2016-12-17 新浪博客服务器挂掉了,所有博客页面都无法打开
- 数据结构——堆的C语言实现
- MaxCompute 中的Code Generation技术简介
- 4.6 Spark SQL 数据清洗
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何在初始化的时候写入参数
- bootstrap在php中怎弄,bootstrap插件怎么用
- 【SEM】1 基本概念
- 为什么我的儿子不沉迷游戏?一位游戏策划家长的分享
- 协调世界时转换为GPS周秒(转载)
- ios修改apn的插件_iPhone手机APN修改方案
- 【Nvidia AGX Xavier】AGX Xavier使用记录
- ZUCC_Object Oriented Programming_Lab01 Introduction to Java
- idea 远程debug调试
- [科普]DLL是什么
- Ubuntu五笔输入终极解决方案(Rime)
- wsctf.exe病毒专杀