Unable to resolve target 'android-14' 解决方法

本文深入分析了Android中Theme.AppCompat相关问题的原因及其解决方案,包括如何正确配置最小SDK版本、导入兼容包等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由头:好久不写android,这次项目需要,导入android包就出现了问题。主要是由sdk的版本不同,导致的主题引用方式不同。

原文地址:Android关于Theme.AppCompat相关问题的深入分析

先来看这样一个错误:

No resource found that matches the given name '@style/Theme.AppCompat.Light'

对于这个错误,相信大部分Android开发者都遇到过,可能很多朋友通过百度或者Google已经解决了这个问题,但是网上大部分都只给出了解决方法。

正所谓知其然,知其所以然,本文将从此问题出发,深入分析探讨导致此问题的原因、由其衍生出来的一系列问题及其解决方案。

Android Support Library

The Android Support Library package is a set of code libraries that provide backward-compatible versions of Android framework APIs as well as features that are only available through the library APIs.

Android的SDK版本很多,新的SDK版本包含了很多新的特性,为此Google官方提供Android Support Library package来保证高版本SDK的向下兼容。通过使用此包,可以让拥有最新SDK特性的应用运行在API lever 4(即Android 1.6) 及更高版本的设备之上。

  • v4 Support Library
    此包用在API lever 4(即Android 1.6)及更高版本之上。它包含了较多的内容,使用非常广泛,例如:Fragment,NotificationCompat,LoadBroadcastManager,ViewPager,PageTabStrip,Loader,FileProvider 等。
  • v7 Support Libraries
    此包是针对API level 7(即Android 2.1)及以上版本而设计的,但是v7是要依赖v4这个包的,v7支持了Action Bar以及一些Theme的兼容。

    Note: v7 appcompat library
    v7 appcompat library 是包含在 v7 Support Libraries里面的一个包,正是此包增加了Action Bar 用户界面的设计模式,并加入了对material design 的支持,是我们使用最多的一个兼容包。

  • v13 Support Library
    此包是针对API level 13(即Android 3.2)及更高版本设计的,一般我们都不常用,平板开发中能用到,这里就不过多介绍了。

  • v17 Preference Support Library for TV
    看名字就知道了,此包主要是为了TV设备而设计。

Android Theme

  • Hoho Theme

在4.0之前Android可以说是没有设计可言的,在4.0之后推出了Android Design,从此Android在设计上有了很大的改善,而在程序实现上相应的就是Holo风格,所以你看到有类似 Theme.Holo.Light、 Theme.Holo.Light.DarkActionBar 就是4.0的设计风格,但是为了让4.0之前的版本也能有这种风格怎么办呢?这个时候就不得不引用v7包了,所以对应的就有Theme.AppCompat.LightTheme.AppCompat.Light.DarkActionBar,如果你的程序最小支持的版本是API14(即Android 4.0),那么可以不用考虑v7的兼容。

  • Material Design Theme

Android在5.0版本推出了Material Design的概念,这是Android设计上又一大突破。对应的程序实现上就有Theme.Material.LightTheme.Material.Light.DarkActionBar等,但是这种风格只能应用在在5.0版本的手机,如果在5.0之前应用Material Design该怎么办呢?同样的引用appcompat-v7包,这个时候的Theme.AppCompat.LightTheme.AppCompat.Light.DarkActionBar就是相对应兼容的Material Design的Theme。

问题分析

由此可以得出以下情形会导致本文一开始提出的问题。

  • 项目使用的是Theme.AppCompat主题,具体表现为
    项目values目录styles.xml文件里面style为
    <resources>
      <style name="AppBaseTheme" parent="Theme.AppCompat.Light"></style>
      <style name="AppTheme" parent="AppBaseTheme"></style>
    </resources>
    AndroidManifest.xml文件里面
    android:theme="@style/AppTheme"
  • 项目支持的最小SDK小于API 14(即Android4.0),具体表现为
    AndroidManifest.xml文件里面,minSdkVersion<14,比如

      <uses-sdk
          android:minSdkVersion="8"
          android:targetSdkVersion="23" />
  • 项目没有导入android-support-v7-appcompat兼容包。

解决方案

此时的解决方法有如下几种:

  1. 既然没有找到Theme.AppCompat.Light主题,那么我就不使用此主题。此时将项目values,values-v11,values-v14目录下的styles.xml文件里面的style都改为
    <resources>
     <style name="AppBaseTheme" parent="android:Theme.Light"></style>
     <style name="AppTheme" parent="AppBaseTheme"></style>
    </resources>
  2. 那如果没有找到Theme.AppCompat.Light主题,而我们又想要使用最新的主题效果呢,还有种方法就是将AndroidManifest.xml文件里面,minSdkVersion改成14,比如

     <uses-sdk
         android:minSdkVersion="14"
         android:targetSdkVersion="23" />

    此时再将项目values,values-v11,values-v14目录下的styles.xml文件里面style都改为

    <resources>
     <style name="AppBaseTheme" parent="android:Theme.Holo.Light"></style>
     <style name="AppTheme" parent="AppBaseTheme"></style>
    </resources>
  3. 当然以上都不是最好的方法,只是提供一种思路。最好的方法就是导入android-support-v7-appcompat库。下面具体介绍:
    3.1 通过Android SDK Manager下载最新的Android Support Library。


    img1.jpg


    下载完成之后,可以在以下目录找到AppCompat library

    android-sdk/extras/android/support/v7/appcompat

    3.2 将此目录下的项目导入到Eclipse中


    img2.jpg

    3.3 右键点击我们的Android项目,选择Properties,左侧选择Android,在下方Library框里点击Add,最后选择appcompat_v7,确定。
    此时问题就解决了。

    img3.jpg

    但在以上3.2导入appcompat_v7到Eclipse之后,有可能还会出现错误提示,比如
    appcompat_v7\res\values-v23\styles_base.xml:20: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.Button.Colored'.

出现此问题的原因是appcompat_v7已经更新到了最新版本并且高于编译环境的SDK版本,此时在Android SDK Manager将SDK及编译工具更新到最高版本


img4.jpg


升级完成之后右键点击appcompat_v7项目,选择Properties,选择Project Build Target 为最新版本,这样就OK了。


img5.jpg

通过以上的分析,相信朋友们以后再遇到AppCompat相关的问题应该不再是问题了。欢迎大家留言讨论。

原文地址:http://www.jianshu.com/p/6ad7864e005e 转载请注明出处


### 解决方案 当遇到 `Error: Unable to resolve target android-9` 的问题时,通常是因为 Eclipse 或 ADT 插件未能找到对应的 Android API Level 9 平台工具包。以下是详细的解决方案: #### 1. 检查本地 SDK 是否安装对应平台 确认是否已下载并安装了 Android API Level 9(即 Android 2.3/2.3.1)。可以通过以下方式验证: 打开 **SDK Manager** 工具,并查找是否存在名为 “Android 2.3 (API 9)” 的条目[^1]。如果未安装,则勾选该选项并点击“Install”。 #### 2. 修改 Project Properties 文件 在项目的根目录下找到 `project.properties` 文件,检查其中的配置项 `target=android-9` 是否存在。如果没有此文件或者其内容为空,则手动创建或编辑它,确保包含以下行: ```properties target=android-9 ``` #### 3. 更新 AndroidManifest.xml 中的目标版本号 除了调整 `project.properties` 外,还需要同步更新应用清单文件中的设置。具体来说,需更改 `<uses-sdk>` 节点下的属性值为匹配当前环境支持的最低和最高级别。例如: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="9" /> </manifest> ``` 注意这里将 `android:targetSdkVersion` 设置为了 `"9"`[^2]。 #### 4. 如果上述操作仍失败尝试降级处理 有时即使完成了以上步骤也可能因为某些原因继续报错。此时可以考虑降低目标平台至更低版本比如 `android-8`(Froyo),但这仅适用于确实不需要依赖 Gingerbread 新特性的情况[^3]: 再次修改 `project.properties` 和 `AndroidManifest.xml` ,把所有的 `9` 替换成 `8`. #### 5. 升级开发工具链 考虑到较老版的 Android Studio/Eclipse 可能不再完全兼容现代硬件软件条件, 建议升级整个开发套件包括但不限于 JDK,Eclipse IDE 自身以及最新版 ADT Plugin 。此外也可以切换到官方推荐更现代化替代品 —— Android Studio 来完成相同任务[^4]. #### 示例代码片段展示如何定位错误源码位置 假设我们有一个简单的 Java 类用于测试目的: ```java public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Potential issue line. } } ``` 上面这段程序里假如 R.java 文件生成过程中出现了异常就可能导致运行时报类似的 cannot be resolved errors. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值