这一次API更新了API之后,以前创建的一些项目全都报错,再重新创建新项目的时候也是报错,各种各样的报错不计其数,太多了,就没有一一记录了,网上百度了好久,无果;问老师,无果!
于是就想着是不是因为更新到了最新版本的兼容性什么的问题,于是再次尝试新建项目,可是我突然发现我对新建项目里面一些选择项甚至都还很模糊,于是就开始解决这第一个问题,对新建一个Android的过程做一个复习,如下:
?
?
问题一
?
?
新建一个Android时SDK版本选择详解:
?
?
?
?
Application Name:应用程序显示给用户的名称;
Project Name:是项?的?件夹名称和在Eclipse中显?的名称;
Package Name:应用程序包的命名空间(遵循Java中相同的规则),该包名在同?Android系统上所有已安装的应?中具有唯?性,因此,通常使?你所在公司组织或发布实体的反向域名作为包名的开始是?个很好的选择。此处可以使?"com.example.myfirstapp" ,但是你不能在 Google Play上发布使?"com.example"作为包名的应?;
Minimum Required SDK:用API level表示你的应用支持的最低Android版本,为了支持尽可能多的设备,你应该设置为能支持你应用核心功能的最低API版本;如果某些非核心功能仅在较高版本的API支持,你可以只在支持这些功能的版本上开启他们(将在《兼容不同的系统版本》这一章详细了解),此处采用默认值即可;
Target SDK:表示你测试过你的应用支持的最高Android版本(同样用API level表示),当Android发布最新版本后,你应该在最新版本的Android测试你的应用同时更新target sdk到Android最新版本,以便充分利用Android新版本的特性;
Complie with:是你的应用将要编译的目标Android版本,此处默认为你的SDK已安装的最新Android版本,你仍然可以使用较老的版本编译项目;
Theme:为你的应用指定界面风格;
?
?
问题二
这个问题明白之后,我就开始尝试着创建不同版本SDK的程序,发现一个神奇的现象,为什么当我的Minimum Required SDK选择小于API14(即Android 4.0)时就各种报错的问题,报错姿势如下:
[2015-04-01 17:13:25 - ddddd] D:\Users\acenodie\android\workspace\ddddd\res\values\styles.xml:7: error: Error retrieving parent for item: No resource found that matches the given name ‘Theme.AppCompat.Light‘.
[2015-04-01 17:13:25 - ddddd]
[2015-04-01 17:13:25 - ddddd] D:\Users\acenodie\android\workspace\ddddd\res\values-v11\styles.xml:7: error: Error retrieving parent for item: No resource found that matches the given name ‘Theme.AppCompat.Light‘.
[2015-04-01 17:13:25 - ddddd]
[2015-04-01 17:13:25 - ddddd] D:\Users\acenodie\android\workspace\ddddd\res\values-v14\styles.xml:8: error: Error retrieving parent for item: No resource found that matches the given name ‘Theme.AppCompat.Light.DarkActionBar‘.
[2015-04-01 17:13:25 - ddddd]
[2015-04-01 17:13:27 - ddddd] D:\Users\acenodie\android\workspace\ddddd\res\values\styles.xml:7: error: Error retrieving parent for item: No resource found that matches the given name ‘Theme.AppCompat.Light‘.
[2015-04-01 17:13:27 - ddddd]
[2015-04-01 17:13:27 - ddddd] D:\Users\acenodie\android\workspace\ddddd\res\values-v11\styles.xml:7: error: Error retrieving parent for item: No resource found that matches the given name ‘Theme.AppCompat.Light‘.
[2015-04-01 17:13:27 - ddddd]
[2015-04-01 17:13:27 - ddddd] D:\Users\acenodie\android\workspace\ddddd\res\values-v14\styles.xml:8: error: Error retrieving parent for item: No resource found that matches the given name ‘Theme.AppCompat.Light.DarkActionBar‘.
[2015-04-01 17:13:27 - ddddd]
?
?
什么都不说了,先去百度一下;
?
?
acenodie 于 2015/4/2 11:20 修改
虽然很废话,但我还是要说,这一百度确实是百度到了很多东西,但是在百度到之后太过于激动,就去看了一下LOL的德玛西亚杯,这一看根本停不下来,直接看到断网;所以直到今天才又把昨天百度到的资料仔细看一下,看能不能解决我的问题,下面就开始了;
?
?
?
?
功夫不负有心人,昨天找到的资料果然是有用的,下面来整理一下解决这个问题的过程;
首先在百度贴吧里发现以为仁兄遇到同样的问题,一位大神道出玄机:
?
?
从这里大概知道原来4.0以前的版本和4.0及之后的版本确实是有差异的,难怪会出现4.0以后的版本没有问题,而以前的就有问题情况;虽然知道了点什么,但添加jar包,添加什么jar包,如何添加呢,一头雾水,于是大神又在后面给出解答:
?
?
我按照他说的做了可是仍然没有反应,但在下面回复中发现一个链接,说是这里面有这个问题的解,点进去看,大同小异,我按照他说的做了,可是到第三步的时候我发现就不行了,如下图,因为我的Add里面根本就没有Android-support-v7-appcompat这个东西;
但是我从他的问题里发现了一个神奇的东西:
?
?
?
?
这里至少告诉了我为什么Android-support-v7-appcompat这个包是重要的,因为所要用到的资源都在这个包里面,缺不得;但Android-support-v7-appcompat是个什么东西呢,百度之;
?
?
?
?
百度之后,发现了百度经验的一篇文章,终于让我知道了我是如何染上了这多年不愈的顽疾,首先让我知道了appcompat_V7这究竟是何方妖怪;
?
?
看到下面这一段的时候,我有种似曾相识的感觉,似乎回忆起了我当初是如何手贱的铸就大错,可是由于我当时脑壳短路,根本没有意思这一操作带来的后果,而是傻傻的看log,才导致走了这么多弯路,这里一定要让自己记住,一定要记得自己在犯错误之后回忆之前手贱干了什么不该干的;
?
?
?
?
但是这个答案还是没有完全解决我的问题,因为我的appcompat_v7包不知道哪儿去了,也不知道怎么添加回来,于是再次百度之,百度经验里已经有详细的过程,可是我觉得这样太麻烦了,于是乎有百度了会,无果,所以就用这种方法吧,虽然麻烦点!
?
?
但是加入之后又出现了新的错误:
?
?
由于这是从SDK上面直接下载的包,怎么会出错呢,我就想着是不是我之前什么时候改动了appcompat_v7什么,还是这个包有损坏,第一反应就是百度,在stackoverflow上面看到些相同的症状,但是都不能解决我的问题,说到stackoverflow必须要提一下,这几天百度这个问题,没少上这个网站,由于这个是国外的网站,所以上面全英文,回答也是,我突然发现自己阅读上面的东西没有多大的问题,呵呵呵呵呵呵,看来我英文还是阔以(开玩笑的),但是上面没有一个答案解决我的问题;扯远了,回来继续,由于是官方提供的包, 所以没有多想,直接打开SDK Manager上面把这个包Android Support Library删除,然后重新下载;如下图:
加入了这个之后最明显的变化便是如下两个图:
?
?
?
?
?
?
做到这里其实最主要的问题已经解决掉了,通过这个问题,引用网上一位仁兄的总结如下:
- SDK低于4.0,新建第一个Activity时会自动产生appcompat_v;
- 删除appcompat_v7是可以的,但是要求SDK的最低版本不能低于4.0(经过实践);
- 为了兼容2.x,appcompat_v7还是要留着的;
?
?
上面说到,主要的问题是解决了,意思是还有次要的问题咯,还真是没错;就是Graphic Layou不能显示UI的问题,说到这里我似乎想到了最初为什么会出现这样的问题,貌似最开始就是因为这个不能显示了,就这里捣鼓哪里捣鼓,整出这么问题,虽然这个过程很艰辛,不过确实又明白了很多新的,自己不懂的东西,也对以前的基础知识夯实了一下,不过这样子无疑又会让我的进度慢了两天,如果说每天排除这样那样莫名其妙的错误也是学习Android的一部分的话,那真的可谓此行之路漫漫且艰,我该有这样的心理准备的,加油;
?
?
又说多了,还是来说说剩下来的问题吧;现在遇到的问题主要由两个,一个是在appcompat_v7导入之后,有的项目的R.java文件没有了;一个就是上面提到的Graphic Layout不能显示的问题;分别解决如下;
?
?
?
?
问题三
这个问题就是R.java文件没有了,直接导致的报错就是Activity中关于R.java中资源的引用出现问题,如下:
?
?
其实这并不是第一次遇到这个问题,刚开始接触Android的时候(其实现在也没接触多久),就经常出现这样的错误,但是那时候出现这种错误的原因大多是因为布局文件(XML文件)有明显的语法错误导致的,只要把语法错误修正,然后进行一些ReFresh、Clean、Fix Project Properties这些操作等能解决问题,虽然现在还不知道这些操作的原理是什么,为什么要这么做(希望能快些了解);
?
?
?
?
?
?
但很明显这一次的问题并不是这么简单,因为这一次布局文件(XML文件)没有明显的报错,执行了上述操作之后,毫无反应,先不多想,百度之;
?
?
百度了一会,还没有找到答案,于是又按照原来的方法创建不同API版本的项目,下面是实验的过程:
?
?
当创建的项目的其他的SDK版本不变时,Compile With小于14时,出现如下错误:
?
?
可以发现当Compile With的版本小于14时,根据上面的错误提示,就不支持"Holo Light with Dark Action Bar"这个主题,于是乎另选一个主题,没有报错,继续next,但当到"Create Activity"这一步时,也提示类似的错误,如下:
?
?
通过实验,在这一步的时候,如果我们去掉Create Activity前面的钩,即在此时不创建Activity时,这个错误将消失,见下图;
?
?
但是做到这里的时候我就没有继续向下面尝试了,因为感觉即时创建项目成功过了,后面的和我目前要解决的问题,关系不大;于是乎我们从出现"This template requires a build target API version of at least 14,….."这里开始解决;
?
?
百度到的第一篇感觉有用的东西,是这一篇,他并没有完全解决这个问题,但是他其中一步操作让我知道了些什么,如下:
?
?
我也试着打开了自己电脑上的目录,和这个一样,突然觉得这里应该就是即将创建的Activity的模板的配置文件,根据他的叙述,这个文件以前并不是这样的,而是在一次更新之后才出现的,以前的版本如下:
所以可以看出在更新之后,配置语句里应该是多了一些限制条件,所以直接导致这个项目创建不了,这里我的第一想法便是把这个限制条件,即minBuildApi,去掉或把它的值改小,试之,
当把这条语句去掉的时候,重启Eclipse,创建工程,发现选择Blank Activity的时候没有报错了,如下,可是当选择其他的ACtivity模板时,依然报相同错误;由此可以知道这里minBuilldApi确实发挥了作用,虽然不知道这样改动会不会引发其它错误;
这里我就没有去进一步尝试将minBuildApi的值改小会是什么情况了,因为对我解决这个问题貌似帮助不大;
上面说到将minBuildApi去掉可以成功创建项目了,但是有一点必须提到,这里创建成功的项目仍然会像其他的项目一样,没有R.java;
?
?
随便提一下作者的做法,她是选择将整个BlankActivity用以前的版本替换掉,解决了不能创建的问题,具体为何这么做,他也不知道,但解决这个问题的方法的原理应该和我那个大同小异,都是直接或间接改动它的minBuildApi;
?
?
为了搞清楚为什么是这么回事,继续百度之;
?
?
在这篇文章中,看到了更多的关于这方面的东西,同时也知道了部分原因,见下图:
?
?
就是当更新到adt 22.6.3之后的版本中,编译器需要 Minimum SDK 最小为api 7,Target SDK和Complie SDK最低为14,最低位14这个我已经尝试了果不其然,至于Minimum SDK 最小为api 7,试错如下图:
?
?
当发现百度也无能为力后,便想到了google,在google中,找到了一些关于Support Library的资料 ,其中介绍了v4和v7的一些知识,Support Library Features
里面有更为详细的v4、v7等支持库的资料,有需要的时候再看;
?
?
说回为什么Target SDK和Complie SDK最低为14,当我再次用google查找上面的错误时,在stackoverflow上面发现了有用的解释,如下,第一次觉得stackoverflow还是有些用,关键要配上合适的搜索引擎呀,哎;
?
?
大意和上面提到的差不多,就是从ADT22.6.2版本之后,就需要API 14及以上什么的,不过这里感觉更详细写,边记录下来了,例如还提到了要创建Fragment,而这个东西需要API 14 and so on;
?
?
在同样问题的上,后面一位仁兄的回答,感觉更符合我的胃口,由于他的回答中有不少连接,所以我直接复制下来而不是截图,如下;
It‘s new feature of ADT 22.6.2
Even in "None" theme ADT(22.6.2) create "Fragment Layout"
There is four ways:
- Try to change "Target" and "Compile" to API 14 or higher. But you need then remove all entries of "Fragment Layouts"
- Uncheck "Create activity" checkbox, and create activity manually. Good howto: Best way to add Activity to an Android project in Eclipse?
- Downgrade to 22.3.0 for example
- Try to change templates. In link below you find howto.
I use third way for my apps with APIs lower 14. In different directories I have installed 22.3.0 and 22.6.2
There in 22.6.2 is some other bugs with blank files and problems with AVD. New version of ADT really buggy...
Look also this links:
ADT blank activity created with fragment activity..
Eclipse doesn‘t generate MainActivity.java & activity_main.xml
and search, yep )
http://stackoverflow.com/search?q=adt+22.6
?
?
Added some new ways.
How I use it now:
- You can create project in 22.3.0 or lower. Then open it in 22.6 or greater.
- You can create project in 22.3.0 or lower and leave it blank. Then in 22.6 or greater you can use this blank project as template. Just copy this template-project and past it with new name as you new-project in Eclipse workspase.
Enjoy! )
?
?
?
?
通过他的回答我也确实知道了,这就是ADT新版本的一个特点,甚至可以称之为bug,至于解决的办法,他提供的是选择更高的API版本,或者用以前的ADT版本,还以链接的形式提供了很多其他的方法,现在断网没有时间看,明天看;其实就目前我知道的还有一种方法就是上面提到的去到配置文件,将minBuildApi这一配置语句删掉,虽然不知这样会不会导致其他的错误,没深入尝试;
?
?
所以这个问题,即为什么创建的 项目的Minimum SDK 最小为api 7,Target SDK和Complie SDK最低为14,主要是因为ADT的版本问题,更深层次原因也不得而知了;现就这样吧,以后再深究;
?
?
现在的问题是有的项目即时能够避开上面这个问题,创建的项目仍然有问题,就是主问题:没有R.java,于是我就对每个版本进行尝试,看是哪些有问题,如下图:
API后面的三个数字分别代表Minimum Require SDK、Target SDK、Complie With的API版本号,发现只有API 20的时候,出现了错误;
?
?
由于并不是每一个SDK创建的项目都会出现没有R.java的问题,所以下面将针对有问题的版本,即API 20进行试验,:
?
?
其实做到这里的时候已经基本可以确定是API 20有问题,可是API_8_20_21的出现让我觉得有必要再试一下,因为安理来说他应该是有问题的;
?
?
由于在做这些实验的时候创建的项目实在太多了,Eclipse巨卡,而且最后甚至爆出java内存溢出类似的错误,所以删掉了部分项目;
?
?
在实验的时候出现了又一个谜一般的现象,如下图,当测试API_8_19_19的时候居然报错了,按照推理应该只有API20有错误,这里是不应该有错的,但是我反复创建还是这样子,于是我开始怀疑是不是API19也有问题,但是看到刚才API8_21_19都没报错,见上图,难道刚才创建的时候选错了,于是我删掉API8_21_19重新创建,于是神奇的事情出现了,API8_21_19果然就报错了,我甚至都有点怀疑真的是刚才选错了,但还是不信,就又把删掉API8_21_18重建,也报错了,如下图:
?
?
于是开始检查Log,,报错姿势如下:
[2015-04-03 01:17:34 - API_8_21_19] D:\Users\acenodie\android\workspace\appcompat_v7\res\values-v21\themes_base.xml:234: error: Error retrieving parent for item: No resource found that matches the given name ‘android:ThemeOverlay.Material.Dark.ActionBar‘.
[2015-04-03 01:17:34 - API_8_21_19]
[2015-04-03 01:17:34 - API_8_21_19] D:\Users\acenodie\android\workspace\appcompat_v7\res\values-v21\themes_base.xml:239: error: Error: No resource found that matches the given name: attr ‘android:colorControlHighlight‘.
[2015-04-03 01:17:34 - API_8_21_19]
[2015-04-03 01:17:34 - API_8_21_19] D:\Users\acenodie\android\workspace\appcompat_v7\res\values-v21\themes_base.xml:238: error: Error: No resource found that matches the given name: attr ‘android:colorControlNormal‘.
[2015-04-03 01:17:34 - API_8_21_19]
[2015-04-03 01:17:34 - API_8_21_19] D:\Users\acenodie\android\workspace\appcompat_v7\res\values-v21\themes_base.xml:81: error: Error: No resource found that matches the given name: attr ‘android:colorAccent‘.
[2015-04-03 01:17:34 - API_8_21_19]
[2015-04-03 01:17:34 - API_8_21_19] D:\Users\acenodie\android\workspace\appcompat_v7\res\values-v21\themes_base.xml:83: error: Error: No resource found that matches the given name: attr ‘android:colorControlActivated‘.
[2015-04-03 01:17:34 - API_8_21_19]
[2015-04-03 01:19:01 - API_8_21_18] D:\Users\acenodie\android\workspace\appcompat_v7\res\values-v21\themes_base.xml:155: error: Error: No resource found that matches the given name: attr ‘android:colorAccent‘.
[2015-04-03 01:19:01 - API_8_21_18]
[2015-04-03 01:19:01 - API_8_21_18] D:\Users\acenodie\android\workspace\appcompat_v7\res\values-v21\themes_base.xml:157: error: Error: No resource found that matches the given name: attr ‘android:colorControlActivated‘.
[2015-04-03 01:19:01 - API_8_21_18]
[2015-04-03 01:19:01 - API_8_21_18] D:\Users\acenodie\android\workspace\appcompat_v7\res\values-v21\themes_base.xml:158: error: Error: No resource found that matches the given name: attr ‘android:colorControlHighlight‘.
[2015-04-03 01:19:01 - API_8_21_18]
[2015-04-03 01:19:01 - API_8_21_18] D:\Users\acenodie\android\workspace\appcompat_v7\res\values-v21\themes_base.xml:156: error: Error: No resource found that matches the given name: attr ‘android:colorControlNormal‘.
[2015-04-03 01:19:01 - API_8_21_18]
[2015-04-03 01:19:01 - API_8_21_18] D:\Users\acenodie\android\workspace\appcompat_v7\res\values-v21\themes_base.xml:153: error: Error: No resource found that matches the given name: attr ‘android:colorPrimary‘.
[2015-04-03 01:19:01 - API_8_21_18]
?
?
真是草泥马,又是appcompat_v7,麻痹的,简直要被这个文件逼疯了!!!!!!!!!!!!!!!!!
?
?
确实是冒火了,但问题还是要解决呀,开始检查,发现这里并没有错,见下图:
?
?
删除appcompat_v7的时候还 删不掉,关掉Eclipse去WorkSpace中删除!
再按照上面的方法方法添加appcompat_v7,clean,Fresh,无果!!!!!!!!麻痹的眼看就要找到原因了,又给老子整这么一出,这是要闹哪样!!!!!
?
?
但是就在这种情况下,还是有几个工程无论我怎么删除或者重建、重启Eclipse都不会报错,这他妈才是好工程呀,哎,如下图:
?
?
而且在重启了Eclipse之后,这些没有报错的工程的Graphic Layout也可以正常显示了,如下图:
?
?
acenodie 于 2015/4/3 2:08 修改
算了今天就到此位置了吧,麻痹的,这个问题又耽误了老子一天,本来以为看到了方向,现在又是莫名其妙的错误,没有网真是什么都做不了,明日有网再战,马上清明节放假,老子有的是时间,麻痹的,就看这个问题能困扰我多久!!!
?
?
acenodie 于 2015/4/3 12:08修改
开始今天的工作
?
?
今天一起来就把昨天的报错百度了下,在一篇文章中有所获,如下:
?
?
于是我就开始找一个错误的项目尝试,如下的API8_19_19:
右键打开属性,进入到Android界面,将Project Build Target 中选择最高的API版本;
?
?
?
?
点击ok,然后clean,神奇的事情就发生了:
而且我还发现,如果我在这个时候重启Eclipse的话,连Graphic Layout都可以正常工作了:
?
?
鬼使神差的,我觉得应该是appcompat_v7的问题,但是如果将其Project Build Target改低的话就会出现报错;
?
?
而且如果这样改动的话,下一个问题(Graphic Layout不显示)也就不存在了;
?
?
反正现在就算是找到解决方案了,就是这个问题,改动Project Build Target为最新的就可以了,具体为什么,也不想再深究了,先继续基本知识的学习吧,以后有这心情再来搞个所以然;
?
?
?
?
?
?
?
?
我了防止我产生这两天什么都没做的错觉而导致的愧疚感,无论我现在是多么的不情愿,我还是要总结下为了排除这个Bug,付出这么多时间,我收获了什么,还遗留下什么问题,下面我将先说一下我是如何遇到这个问题的,并且在解决每个问题的收获:
?
?
我是如何出现这个问题的?
前几天一直升级SDK,这应该是导致问题的直接来源,可能升级了一些Android Support Library,或者是什么,也记不清了,最直接的就导致我的项目的Graphic Layout不显示了,于是百度,没有找到可行的办法,于是自己捣鼓,不知怎么的,把appcompat_v7给删除了,接着就是各种各样莫名奇妙的问题,后来知道了appcompat_v7的重要性之后,添加回来了,可是部分项目又出现了没有R.java的情况,Graphic Layout也不能显示,折腾了好久,发现要设置Project Build Targe为最新版本,现在也不知道为什么要这样,反正是可以解决问题的,至此,各种疑难杂症一并解除,具体原理不得而知;
?
?
下面分问题总结收获与遗留的问题:
问题一:新建一个Android时SDK版本选择
收获:对新建项目时的各个选项所代表的含义有了进一步的了解;
疑问:各个选项要在什么地方使用不得而知,还有这三个API版本和Project Build Target有什么关系不得而知;
?
?
问题二:当我的Minimum Required SDK选择小于API14(即Android 4.0)时就各种报错的问题
收获一:ADT更新到了22.6.2版本之后,创建新的安装项目,会出项appcompat_v7的内容,这是Google自己的兼容包,就是一个支持库,能让2.1以上全使用4.0版本的界面,这个包是万万不能改动或删除的,如果不想要这个包出现,将Minimum Require SDK的值设为大于等于14即可;
收获二:如果你的appcompat_v7不小心手贱删掉了,只能新建一个Minimum Require SDK小于14的项目创建;
- SDK低于4.0,新建第一个Activity时会自动产生appcompat_v;
- 删除appcompat_v7是可以的,但是要求SDK的最低版本不能低于4.0(经过实践);
- 为了兼容2.x,appcompat_v7还是要留着的;
收获三:如果你新建的Minimum Require SDK小于14的项目的Graphic Layout没有显示,重启Eclipse即可;
?
?
问题三:R.java文件没有了
疑问:clean、fresh、fix分别代表什么意思;
疑问:Project Build Target和什么有关;
?
?
?
?
?
?
?
?
总结:
本来以为这一次遇到问题这么有激情还是很好的,发现战线拉得太长还是遭不住呀,适可而止!
?
?
?
?