码迷,mamicode.com
首页 > 其他好文 > 详细

SDK更新后出现的各种疑难杂症

时间:2015-04-03 14:46:45      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

这一次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删除,然后重新下载;如下图:

技术分享

加入了这个之后最明显的变化便是如下两个图:

? ?

技术分享

? ?

技术分享

? ?

做到这里其实最主要的问题已经解决掉了,通过这个问题,引用网上一位仁兄的总结如下:

  1. SDK低于4.0,新建第一个Activity时会自动产生appcompat_v
  2. 删除appcompat_v7是可以的,但是要求SDK的最低版本不能低于4.0(经过实践);
  3. 为了兼容2.xappcompat_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:

  1. Try to change "Target" and "Compile" to API 14 or higher. But you need then remove all entries of "Fragment Layouts"
  2. Uncheck "Create activity" checkbox, and create activity manually. Good howto: Best way to add Activity to an Android project in Eclipse?
  3. Downgrade to 22.3.0 for example
  4. 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:

  1. You can create project in 22.3.0 or lower. Then open it in 22.6 or greater.
  2. 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! )

? ?

来自 <http://stackoverflow.com/questions/22755432/new-android-application-project-cant-create-blank-activity>

? ?

通过他的回答我也确实知道了,这就是ADT新版本的一个特点,甚至可以称之为bug,至于解决的办法,他提供的是选择更高的API版本,或者用以前的ADT版本,还以链接的形式提供了很多其他的方法,现在断网没有时间看,明天看;其实就目前我知道的还有一种方法就是上面提到的去到配置文件,将minBuildApi这一配置语句删掉,虽然不知这样会不会导致其他的错误,没深入尝试;

? ?

所以这个问题,即为什么创建的 项目的Minimum SDK 最小为api 7,Target SDKComplie 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的项目创建;

  1. SDK低于4.0,新建第一个Activity时会自动产生appcompat_v
  2. 删除appcompat_v7是可以的,但是要求SDK的最低版本不能低于4.0(经过实践);
  3. 为了兼容2.xappcompat_v7还是要留着的;

收获三:如果你新建的Minimum Require SDK小于14的项目的Graphic Layout没有显示,重启Eclipse即可;

? ?

问题三:R.java文件没有了

技术分享

疑问:clean、fresh、fix分别代表什么意思;

疑问:Project Build Target和什么有关;

? ?

? ?

? ?

? ?

总结:

本来以为这一次遇到问题这么有激情还是很好的,发现战线拉得太长还是遭不住呀,适可而止!

? ?

? ?

SDK更新后出现的各种疑难杂症

标签:

原文地址:http://www.cnblogs.com/acenodie/p/4389864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!