Android开发常见的坑。

这是我在学习android开发过程中遇到的一些问题,部分答案来自网络,但是当时整理时忘记把出处记下,衷心感谢那些我借鉴过文章的大佬。以后更新会标明出处。



1、更改包名:
    有时候我们需要变更package name,如果直接从manifest中修改,不仅Java文件中不会自动更换import 包名.R,引起报错,而且已经再manifest中注册的Activity、Service、BroadcastReceiver等的包名也不会自动更换,如果一个个手动改就太费时间了。
    有没有so easy统统搞定的办法,答案是肯定的!Android的ADT中提供了统一替换的工具——Android Tools(使用eclipse或谷歌的ADT Bundle开发均适用)。选中需要变更包名的工程,右键选择Android Tools(倒数第三行的样子),在子选项中选择Rename Application Package,然后输入想更换的包名,然后点ok就搞定啦。


2、android 程序安装后出现问题,可以到logcat中查看异常日志。
Android开发中,所的有输出都在logcat中 包含System.out输出和printStackTrace()输出都在Logcat中,Android开发,建议使用android提供的Log工具类来打印信息。
找到Logcat视图的方式:
Eclipse 点击 Window
Show View会出来一个对话框
点击Ok按钮时,会在控制台窗口出现LogCat视图

android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。
1、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");
2、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择.
3、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息
4、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。
5、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要认真的分析,查看栈的信息了。


3、The method setOnClickListener(View.OnClickListener) in the type View is not applicable for the arguments (Activity_02Activity.MyButtonListener)
    当出现这个错误时是因为倒错包了!查看.java文件的头部可知,导入的是 import android.content.DialogInterface.OnClickListener;其实我们要的包是 import android.view.View.OnClickListener;将其view这个包替换content的包即可解决!


4、在写xml文件时,Attribute is missing the Android namespace prefix,出现这样的错误的原因主要由以下几种:
a、属性定义时,命名前缀错误,这里的命名前缀错误又分为丢失前缀、前缀书写错误
(1)前缀丢失,比如定义一个TextVIew的属性时,android:id=,如果没有写android,便会报错这样错误,但是这个是显而易见的,一般我们不会犯下这个错误;
(2)前缀书写错误,比如定义控件的属性时,把android拼写错了,写成了andriod,由于自己的手误,写成了这样,而且不太容易被发现,以至于我们郁闷了很久,最后终于发现是这么一个低级的不能再低级的错误,瞬间感觉蛋碎了。
b、定义语法错误
    比如我要在res下面建一个xml文件,把<book price="99.0" 出版日期="2008年">疯狂讲义</book>一句代码写成了<book>price="99.0" 出版日期="2008年" 疯狂讲义</book>
当然还有其他的书写错误会报出这样的错误,比如 xml里面莫名的多了一些字符等等
这些令人蛋碎的错误一般都是由于手误导致的,遇到这样的错误时,我就应该立马想到是书写错误或语法错误,让这让低级的错误碎了吧!!



5、android的布局xml文件如何添加注释
添加注释:选中你要注释的代码->ctrl+shift+/
去掉注释:选中你要去掉注释的代码->ctrl+shift+\



6、Hardcoded string,should use @string resource警告 && eclipse中一次性导入用到的所有类 && 重命名多处调用的文本对象 && 重命名包名

在使用eclipse的在布局文件时,有时编辑一些控件的字符串名字中,有时会提示诸如“Hardcoded string "下一步", should use @string resource”的警告,这是什么原因呢?

  1. <Button  
  2.         android:id="@+id/button1"  
  3.         android:layout_width="118dp"   
  4.         android:layout_height="wrap_content"  
  5.         android:text="下一步" />"  

         虽然上述的做法可以正常运行,但是这不是一个好习惯,应该在res/values/strings.xml中设置:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string name="message">下一步</string>  
  4. </resources>  

引用的时候使用:Android:text="@string/message"就行了。这样做可以做到一改全改,在支持多语言时也是很有用的。如果不想编辑strings.xml文件,则用layout框中,点击控件的textview项,new一个新的string名字,再在strings.xml对应的编辑框中完善这个字符串对应的内容就行了。

=====================================================================================================

       使用组合键:ctrl+shift+o可以一次性导入所有需要import的类。

=======================================================================================================

        一个特定对象名字可能在一个Java文件中多次被调用,如果要修改这个对象的名字,可以在eclipse中双击激活这个对象,会显示所有调用到的地方。然后右键选择refactor->rename即可。

=======================================================================================================

        APK应用工程文件夹的第一层名字,可以直接修改名字,右击工程,选择refactor->rename即可



运行Android程序的时候提示:ActivityManager: Warning: Activity not started, its current task has been brought to the front

但是在模拟器上显示出了程序界面,后来google了一下,

有一组提问和回答引起了我的注意:

  1. Hi,  
  2.   
  3. I have a very simple android project. I got the following error message when I try to run it. The emulator is running but the application doesn't come up. I couldn't find any useful information online. Can anyone help me?  
  4.   
  5. Thanks,  
  6.   
  7. arning: Activity not started, its current task has been brought to the front public class Profile extends Activity { /Button button1; CheckBox check1, check2; EditText text1;/  


Answer

  1. Hi Lewis!  
  2.   
  3. It is not an error message, it is a warning. What the system is trying to tell you: The application on the device is the same as your application in Eclipse. And because the application is already running on the device, the system tells you that it is not going to kill and restart it, but bring the activity of your already running app into the foreground. This is pretty normal. ;-)  
  4.   
  5. The warning will not continue if you edit your code and run it (because the app is then killed, reinstalled and started) or if you kill your process on the phone, e.g. via the DDMS.  


解释:

这个不是Android平台的Bug,而是Android本身就是这样一种处理机制。
我们在Android平台下,通过返回按钮,或者程序本身的退出操作,去结束一个进程的时候,实际上Android虚拟机未必会将这个进程真正的结束掉,在内存允许的情况下,这个程序会以缓存的形式存在Android虚拟机中。只有在内存不足的情况下时,Android系统会清理长时间不被激活的任务,以为其他程序提供内存。
Android这样做,是为了你下一次更加快速的启动这个程序。
所以,出现楼主这种情况,是在你的程序没有发生任何变化,并且内存足够的情况下,会将上一次执行的程序,从缓存Cached状态直接放置到任务栈的顶端,则你的程序又可以继续执行了。

消除警告解决办法:

退出虚拟机的程序从新运行一遍。



8、unable to access android sdk add-on list

最近重装了Android Studio,但再次打开时却提示 unable to access android sdk add-on list,看了网上好些方法才成功打开,于是记录下来。

  1. 打开时提示如下错误

    unable to access android sdk add-on list
  2. 在安装路径下找到idea.properties文件,用记事本打开,添加disable.android.first.run=true,保存即可。

    unable to access android sdk add-on list
    unable to access android sdk add-on list
  3. 3

    再次打开Android Studio即可。




9、android studio编译报错Gradle build finished with 100 error(s) in 14s 629ms



Gradle build finished with 100 error(s) in 14s 629ms。无法编译生成apk,最后查找资料,发现是build-tool版本低了,比sdk版本低。于是升级了build-tool工具。

   那么如何升级了,打开sdkManager.exe工具,找到tool项下的build-tool,对其进行升级





10 、java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor ver

Java.lang.UnsupportedClassVersionError: com/Android/dx/command/Main : Unsupported major.minor ver


解决办法:



把compile sdk version与Build tool version改成对应的。


之后在clean ,rebuild。



11、SurfaceFlinger:hwcomposer module not found 问题解决


用android studio运行模拟器时,一直卡在开机页面不动,日志不断打印:

07-15 05:16:50.790 1286-1286/? E/SurfaceFlinger﹕ hwcomposer module not found 
07-15 05:16:50.790 1286-1286/? E/SurfaceFlinger﹕ ERROR: failed to open framebuffer (No such file or directory), aborting 
07-15 05:16:50.790 1286-1286/? A/libc﹕ Fatal signal 6 (SIGABRT) at 0x00000506 (code=-6), thread 1286 (surfaceflinger)

解决方案: 
模拟器勾选” Use Host GPU”,如下图:



这里写图片描述

即,使用电脑GPU渲染模拟器,保存,重启即可。



12、解决Eclipse,MyEclipse出现An error has occurred,See error log for more details的错误  

现把找到的解决方法整理提供给大家,如下:
方法1.  在"开始"-->"运行"---->打入"cmd"进入命令提示行后,再进入eclipse的安装目录,
         然后输入eclipse -clean即可(我用的这个方法 成功了)
方法2. 删除configuration文件夹里除config.ini以外的所有文件,重启Eclipse

解决myeclipse则变为:
在命令行下执行 Myeclipse.exe -clean 对缓存进行清理



其他错误解决:

执行以后,问题依然没有得到解决。

后在进行破解时,发现只要是输入了中文名字,执行破解程序就失败,但如果是输入的是英文名字,则能正确返回 License No,仔细回忆,在系统安装时,由于我的用户名是中文的,且不是系统管理员用户组的用户,是否会是这个问题呢?

再次删除,在 User 目录下建立一个英文的目录,并将该目录赋予当前使用用户的完整读写权限,然后再次安装系统,在安装时选择将 MyEclipse 8.5 安装在这个新建立的目录之下。

在系统启动时,默认有一个 WorkSpaces 目录,将该目录也指向一个不含中文字的目录下,这次启动以后,再也没有报出 

An error has occurred. See error log for more details.107

错误提示,问题得以解决。

附:MyEclipse 8.5 启动过程优化

前言:MyEclipse5.5 大小 139M;MyEclipse6.5 大小 451M;MyEclipse7.0 大小 649M;MyEclipse8.0 大小 772.3MB(速度方面比7.1和7.5都快了许多但还是很费内存)
下 载服务器又是国外的,下载速度累人也就罢了,只要你工作性能一流。不幸的是,MyEclipse 属于狂吃内存的主,特别是 MyEclipse7.0 运行起来,基本上不用干其他工作了,它是一会Quick update,一会 updating indexes ,你耐着性子等它 update 完,它老人家又开始自动 validation 了!

实在忍无可忍,收集了一些关于解决 MyEclipse 的耗内存的办法,经测试非常有效,整理出来,希望可以方便更多的朋友。

1、老是弹出Quick update error 、关闭myeclipse的Quick Update自动更新功能
这个问题的解决办法是关闭自动更新
Windows > Preferences > MyEclipse Enterprise Workbench > Community Essentials,
把选项 ”Search for new features on startup”的前勾去掉即可。

2 、关闭updating indexes
Window > Preferences > Myeclipse Enterprise Workbench > Maven4Myeclipse > Maven>
禁用Download repository index updates on startup 。

3 、关闭MyEclipse的自动validation
validation有一堆,什么xml、jsp、jsf、js等等,我们没有必要全部都去自动校验一下,
只是需要的时候才会手工校验一 下,速度立马提升好几个档次
windows > perferences > myeclipse > validation
将Build下全部勾取消
如果你需要验证某个文件的时候,我们可以单独去验证它。方法是:
在需要验证的文件上( 右键 -> MyEclipse -> Run Validation 。

4、 启动优化,关闭不需要使用的模块
一个系统20%的功能往往能够满足80%的需求,MyEclipse也不例外,我们在大多数时候只需要20%的系统功能,
所以可以将一些不使用的模块禁止 加载启动。
Window > Preferences > General > Startup andy Shutdown 在这里列出的是MyEclipse启动时加载的模块
我这里只让它加载tomcat5 勾选 MyEclipse EASIE Tomcat 5 。
怎样才能知道哪些启动项有用呢?我现在把我知道的启动项用处说一下,还有很多不懂的,
希望大家懂的回复在下面 啊:
WTP :一个跟myeclipse差不多的东西,主要差别是 WTP 是免费的,如果使用myeclipse,这个可以取消
Mylyn:组队任务管理工具,类似于 CVS ,以任务为单位管理项目进度,没用到的可以取消
Derby:一种保存成 jar 形式的数据库,我没用到,取消
一大排以 MyEclipse EASIE 打头的启动项:myeclipse 支持的服务器,只选自己用的,其他取消,
比如我只选了 tomcat 。

5 、去掉MyEclipse的拼写检查(如果你觉的有用可以不去)
拼写检查会给我们带来不少的麻烦,我们的方法命名都会是单词的缩写,他也会提示有错,
所以最好去掉,没有多大的用处
Window > perferences > General > Editors > Text Editors > Spelling > 将Enable spell checking复选框的勾选去掉。

6 、去掉MyEclipse繁杂的自带插件自动加载项
Window > perferences > General > Startup and Shutdown > 将Plug-ins activated on startup
中的复选框有选择性的勾 选去掉。

7 、修改MyEclipse编辑JSP页面时的编辑工具
Window > perferences > General > Editors > File Associations >
在File types 中选择 *.jsp > 在Associated editors 中将”MyEclipse JSP Editor”设置为默认。

8 、修改MyEclipse安装目录的eclipse.ini文件,加大JVM的非堆内存
具体内容如下:
-clean
-showsplash
com.genuitec.myeclipse.product.ide
--launcher.XXMaxPermSize
256m
-vmargs
-Xms128m
-Xmx512m
-Duser.language=en
-XX:PermSize=128M
-XX:MaxPermSize=256M
把下面的那个 -XX:MaxPermSize 调大,比如 -XX:MaxPermSize=512M,再把 -XX:PermSize 调成跟
-XX:MaxPermSize一样大。


13、Error:The SDK Build Tools revision (19.0.0) is too low for project ':app'. Minimum required is 19.1.0
<a href="install.build.tools">Install Build Tools 19.1.0, update version in build file and sync project</a><br><a href="openFile:F:/eclipse_project/NetworkTest/app/build.gradle">Open File</a>


今天更新了一下AndroidStudio, 结果编译程序时报错, 错误如下:

Error:The SDK Build Tools revision (19.0.3) is too low for project ':app'. Minimum required is 19.1.0

该错误提示使用的SDK Build Tools版本低了,

打开对应模块的配置文件,build.gradle, 设定buildToolsVersion为“19.1.0”



另外需要安装Android SDK Build-tools 19.1.0的版本,打开SDK Manager进行安装。


安装过程中出现如下错误:


修改https为http,在Android SDK Manager->Tools-Options...选项界面,
将“Force https://… sources to be fetched using http://…”勾选!

另外需要在文件(C:\Windows\System32\drivers\etc\hosts)中,添加如下一行:
203.208.46.146 dl-ssl.google.com  (注意IP地址可能不同,按各自情况而定)

安装完后,从新sync一下项目即可。



14、现在编译器不能用httpclient

    把编译版本换到6.0以下应该就能用了,在6.0的时候删除httpclient了,在5.1他就过时了,官方不推荐使用了。




如果在刚够构建Android Studio项目的时候,运行发现,出现没找到资源的错误!找不到com.android.support/appcompat-v7/23.0.1/res/values-v23/values-v23.xml

[html]  view plain copy
  1. /路径/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.0.1/res/values-v23/values-v23.xml  
  2. Error:Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'.  
  3. Error:Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.Button.Colored'.  

这是API 23(Android 6.0)中的资源文件,而查看build.gradle,编译的SDK只是为21,我们可以 尝试将compileSdkVersion设为23 (如果sdk里面没有下载API 23的,则需要下载),问题解决!


如果不想下载API 23怎么解决呢?降低appcompat的版本:将build.gradle里面的dependencies对应的appcompat版本降低:


将compile 'com.android.support:appcompat-v7:23.0.1'的版本改为:'com.android.support:appcompat-v7:22.2.1'




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值