android中@TargetApi的作用

MySQL安装配置教程(超级详细) 一、 下载MySQL Mysql官网下载地址:MySQL :: Download MySQL Installer (Archived Versions) 1. 选择要安装的版本,本篇文章选择的是5.7.31版本,点击Download下载 正在上传…重新上传取消 二、 安装MySQL 1. 选择设置类型双击运行mysql-installer-community-5.7.31.0.msi 这里选择是自定义安装,所以直接选择“Custom”,点击“Next” “Developer Default”是 阅读详情

android中@TargetApi的作用是什么?

网上有很多的解释,前篇一律,都是说可以让低版本编译代码,然后高版本就能兼容代码了。

这是很荒谬的。然而我还是做了验证。结果是这种说法是完全错误的。

 

请看google官方的文档对@TargetApi的描述。

由于google被墙,只能用这个链接:

http://gate.baidu.com/?src=http%3A%2F%2Ftools.android.com%2Frecent%2Flintapicheck

 

请看这几句的翻译:

As you can see, lint now has a database of the full Android API such that it knows precisely which version each API call was introduced in. If it detects that you are attempting to call a method which is not available in all versions you are trying to support, it will warn you with messages like the above.


正如你所看到的, lint现 在有完整的Android API的一个数据库,这样它清楚地知道哪个版本的哪一个API调用了。如果它检测到你正试图调用一个方法不是在所有版本都可用,那么它将提醒给你上面的消息。

 

Of course, if you're building your project with the same version of Android as your oldest support version, the compiler will complain if it finds an API call it can't resolve. However, that approach has some downsides. In particular, you may want to access newer APIs on platforms where they are available. If you're compiling against the oldest version of the platform, you would need to use reflection to access all the new APIs, which can be really cumbersome, especially if you have a lot of code using the newer APIs.
The way most developers get around this is to actually use a newer build target, which means you can access all the new APIs directly. You then add some code checks to make sure that the code path which calls the newer APIs is only reached when running on a version which supports it. 

当然,如果您编译的项目的版本和支持的最低支持的版本相同, 编译器会提示找不到相关API。然而,这种方法有一些缺点。特别是,您可能希望访问新的平台上可用的api。如果你对老版本的编译平台,您将需要使用反射来访问所有的新api,可真的麻烦,特别是如果你有很多的代码使用新的api。

实际上大多数开发人员解决这个问题的方法是使用更高的版本来编译这个项目,这意味着您可以直接访问所有的新api。然后添加一些代码检查,以确保调用的代码路径上运行时达成的新api只是一个版本支持它。

 

 

However, when you do this you run the risk of accidentally calling newer APIs, and that's what Lint now helps you detect.
What about code where you are deliberately calling newer APIs from a class you know will only be loaded in the right circumstances? In that case you can "mark" the code as targeting a newer version of the API. Simply annotate the code with the new @TargetApiannotation:

然而,当你这么做了,那么在低版本上调用新的api可能会有崩溃的风险, 这就是lint检测提示的作用之所在。

那么如何保证你调用的新的api的代码的相关类只会在合适的版本下才加载? 在这种情况下你可以“标注”目标的代码的所在版本的API。简单的注释代码@TargetApi(11)

 

If the whole class is targeting newer APIs, you can place the annotation on the class instead:

如果整个类都是新的api的版本,你就可以把@Target标注移除掉。

 

综上,@Target的作用在于提示:使用高编译版本的代码,为了通用性兼容运行此代码的低版本平台。要求程序员做出区分对待的加载。如用内部类等方式区分加载。

 

kettle9.0+ 连接Hadoop报错 kettle bug 阅读详情

相关推荐

自动驾驶开发者必看:nuscenes数据集23类物体标注全解析(附避坑指南)

本文深入解析nuscenes数据集的23类物体标注系统,为自动驾驶开发者提供全面的标注规范解读和实战避坑指南。涵盖多模态数据组织、类别细分规则、属性系统应用技巧以及标注质量验证方法,帮助开发者高效利用这一标杆数据集提升模型性能。

weixin_29041767的博客 255

Android注解@TargetApi和@RequiresApi什么意思?

@TargetApi(Build.VERSION_CODES.LOLLIPOP) @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 编译器跳过低版本没有API 的报错问题,但实际运行还是可能报错 需要手动判断版本 @TargetApi和@RequiresApi含义 含义 这两个注解的作用仅仅是让编译通过,而并没有避免低版本的系统运行高版本的api的问题,在使用时我们需要自己判断版本号来使用不同的api。 目前官方建议使用@RequiresApi。 解读 即使

Tarafireworks的博客 6805

PyCharm配置及使用Git教程

平时习惯在Windows下开发,但是我们又需要实时将远方仓库的代码clone到本地,也需要将自己修改的代码push到远端服务器。

酒酿小圆子呀~ 4万+

@TargetAPI

1.Annotation Annotation继承自java.lang.annotation.Annotation的类,用于向程序分析工具或虚拟机提供package class field methed 等方面的信息。Annotation 提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看, annotation 就像修饰符一样被使用,并应用于包、类 型、构造

cys1991的专栏 8034

【Matlab 六自由度机器人】基于改进型D-H参数的运动学建模与蒙特卡洛工作空间分析

本文详细介绍了如何使用改进型D-H参数法为六自由度机器人建立运动学模型,并利用Matlab Robotics Toolbox实现正运动学计算与可视化。通过蒙特卡洛法对机器人工作空间进行分析,生成三维点云图以直观展示其可达范围,为机器人选型与任务规划提供关键依据。

weixin_29040367的博客 438

CentOS 7下Synopsys DC综合工具安装与配置全攻略(附常见报错解决方案)

本文详细介绍了在CentOS 7操作系统上安装与配置Synopsys Design Compiler(DC)综合工具的完整流程。内容涵盖从系统环境准备、软件安装、许可证配置到实战综合的全过程,并针对DC综合工具在安装和运行中常见的报错问题提供了具体的解决方案,帮助数字IC设计初学者快速搭建稳定的EDA学习环境。

weixin_29159441的博客 257

各个 Android 版本号和 Target API 等级,名称。

各个 Android 版本号和 Target API 等级,名称。

Master-D的博客 4072

全志V3S开发板实战:从零构建嵌入式Linux系统

本文提供了一份针对全志V3S开发板(如LicheePi Zero)的零基础教程,详细指导如何从零开始构建嵌入式Linux系统。内容涵盖编译环境搭建、交叉工具链配置、U-Boot引导程序编译与烧录、Linux内核定制与编译,以及使用Buildroot构建根文件系统,最终实现系统成功启动,帮助开发者深入理解嵌入式系统构建全流程。

tensor9flow的博客 575

TargetAPI和SuppressLint

TargetAPI作用 @TargetApi(版本号) @TargetApi(版本号) 是一个注解,用来兼容不同版本的开发。他指定了下面的一个方法与某个版本对应(大于minSdk),忽略指定的minSdk。例如高版本API需要实现某种功能,而低版本则不需要,可以这样写, @TargetApi(23) private void getPersimmions() { if (Bu

xueAnother的博客 771

GPS数据处理必备:IGS精密星历下载与使用全攻略(附武汉大学/CDDIS/CODE/GFZ地址)

本文为GPS/GNSS数据处理者提供了IGS精密星历的完整下载与使用指南。详细解析了最终、快速、超快速三种精密星历产品的区别与选择策略,并手把手教学如何从武汉大学、CDDIS、CODE、GFZ四大主流数据中心高效获取数据,涵盖文件命名规则解析及自动化下载脚本,助力科研与工程应用。

weixin_29234239的博客 678

【GameFramework框架内置模块】6、实体(Entity)

实体Entity就是一个实体的基本单元,类似于Unity的GameObject对象本体,然后这个本体上面附加其他各种各样组件,才能实现各种各样的功能。一般需要在游戏运行时动态加载的游戏对象,比如怪物、武器、子弹、特效,都需要给这个物体挂载一个实体Entity,这样的话就可以方便的对实例出来的对象进行管理。下面就来看一下如何使用吧。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 3137

android_基础_@TargetApi and @SuppressLint注解

转载自: https://blog.youkuaiyun.com/xuewater/article/details/41963707 Android中的@TargetApi and @SuppressLint @TargetApi 这个注解的意思就是告诉Android的Lint工具,下面的类或者方法是与一个指定的API相对应的,忽略manifeset文件里面的minSdk的设置。 假如你不加这个注解的话,当你在用一个较新的api方法时候,如果manifest文件中定义的minSdk比这个方法对应的版本要低,Lint.

写bug的蚊子的博客 1161

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

android 基础 @SuppressLint("NewApi")和@TargetApi()的作用与区别

在Android代码中,我们有时会使用比我们在AndroidManifest中设置的android:minSdkVersion版本更高的方法,此时编译器会提示警告,解决方法是在方法上加上@SuppressLint("NewApi")或者@TargetApi()。 那他们之间有什么区别呢,很简单, @SuppressLint("NewApi")屏蔽一切新api中才能使用的方法报的android ...

NCTU_to_prove_safety的博客 490

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

@SuppressLint or @TargetApi

@TargetApi and @SuppressLint have the same core effect: they suppress the Lint error. The difference is that with @TargetApi, you declare, via the parameter, what API level you have addressed i

liu_qiqi的专栏 908

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

@TargetApi和@RequiresApi含义

@TargetApi和@RequiresApi含义 前言:遇到问题或想学习更多Android知识,请搜索微信公众号“Android唐浮” 含义 这两个注解的作用仅仅是让编译通过,而并没有避免低版本的系统运行高版本的api的问题,在使用时我们需要自己判断版本号来使用不同的api。 目前官方建议使用@RequiresApi。 解读 即使在方法添加了@RequiresApi,代码还是会往下执行,执行...

Android唐浮的专栏 2万+

@SuppressWarinings, @TargetApi, @SuppressLint, @ViewInject

菇凉偶是刚跨入此行的小菜鸟,最近在eclipse中尝试写一些andriod小应用的时候,第一次碰到了这些@SuppressWarinings, @TargetApi, @SuppressLint, @ViewInject,不知道是什么意思;百度了下,在此给自己做个记录,也希望能和大家相互交流,共同进步!谢谢~ 首先,这些是android带的lint工具提示的,lint官方的说法是 I

浮华瑰梦 1586

@TargetAPI + 版本判断实现高低API版本兼容

安卓开发中,在低版本SDK使用高版本的API会报错。一般处理方法是换一种实现方法,或者在高版本SDK中使用高版本API,低版本SDK中使用效果可能会差点的折衷方案;后者可以用如下技巧来实现。步骤Step 1在使用了高版本API的方法前面加一个 @TargetApi(API号)Step 2在代码上用版本判断来控制不同版本使用不同的代码eg. @TargetApi(11) ...

weixin_30872733的博客 87

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)的作用

//判断在相应的条件下能否运行{}中的代码,主要是判断api兼容问题@TargetApi(Build.VERSION_CODES.JELLY_BEAN)private void showPaymentBtn(ClientCoursePackage coursePackage){ if(coursePackage == null){ payment.setBackground(g

JustinNick的博客 7788

Android中的@SystemApi@hide等

Android中SystemApi hide NonNull TargetApi SystemApi hide PrivateApiNonNull TargetApi参考信息 Android中@SystemApi @hide @NonNull @TargetApi 我们时常在Android源代码中看到的注释,如SystemApi hide NonNull Ta

上海一九四三 9789

安卓开发学到的新知识

3.SuppressLint的作用是什么? 在 Android 代码中, 有时会使用比我们在AndroidManifest中设置的android:minSdkVersion版本更高的方法,此时编译器会提示警告,解决方法是在方法上加上@SuppressLint("NewApi")或者@TargetApi()。 @SuppressLint("NewApi")屏蔽一切新api中才能使用的方法报的an...

qew2017的博客 503

Android之注解的使用介绍

image.png .. 最近在看大神的源码,发现有很多使用注解的地方,调查下相关的使用原理记录一下。_ 注解 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。 和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Ja...

u012739527的博客 178

Android 基础:@SuppressLint(“NewApi“) 与 @TargetApi() 的配置与验证

Android 项目里 minSdkVersion 21 却调用 API 23+ 方法时,Lint 会报 NewApi 警告。本文讲清 @SuppressLint("NewApi") 与 @TargetApi() 的屏蔽边界,给出 build.gradle 与 lint.xml 可复制配置,并演示编译加 Lint 双验证流程。配合 TaoToken 分析报告更高效,官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。

SnowflakeJaguar14的博客 229

Annotation注解及元注解

本文出自 “一剑围城” 博客,请务必保留此出处http://weijiancheng.blog.51cto.com/10190955/1945266标签:注解   annotation   @targetapi   @suppresslint   元注解   在使用许多第三方框架的时候,查阅源码如ButterKnife等。发现许多注解的使用,顿时觉得注解都玩不溜怎么称霸武林。当然无论Java还是A...

qwest0090的专栏 315

Android中的 targetsdkversioin

对于Android初学开发者来说, 可能会好奇 targetsdkversioin这个配置是用来干嘛的。 也有很多一两年开发经验的 Android码农会在面试中被问到这个问题。 Api Level是个什么东西? Android的api在版本间变化可能非常大, 有时候一个 ap...

weixin_33785108的博客 130

@SuppressLint("NewApi")、TargetApi()、RequiresApi()

android下的SuppressLint与TargetApi

guopeng的博客 2546
上一篇: View容器 measure 流程
下一篇: getDimension(), getDimensionPixelOffset(), getDimensionPixelSize()的区别
javalive09
博客等级 码龄16年 43粉丝 281原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值