![](/img/trans.png)
[英]Is there @minApi annotation, analogous to @TargetApi annotation in Android?
[英]Android TargetApi annotation and the Just-In-Time compiler
我为我们的应用程序提供了Android Beam支持。 但是因为我们仍然支持2.2 * 咳嗽死了froyo,死姜饼,咳嗽 *我已经使用TargetApi注释在NfcHandler
类中打包了所有NFC代码,以避免像这样的lint警告:
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public class NfcHandler implements NfcAdapter.CreateNdefMessageCallback
然后在onCreate
期间从MainActivity
我在必要时构建对象,如下所示:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
nfcHandler = new NfcHandler(this);
在构造函数中它执行所有必要的NFC东西,然后在代码中if( nfcHandler != null )
我将意图传递给它,因此它可以检查它是否正在接收波束。
一切都很好,很好,大部分时间都有效。 但在很少的场合姜饼设备崩溃:
10-22 16:08:01.022 1734-1734 / com.baseapp.eyeem.p0 E / dalvikvm:找不到从com.foo.MainActivity.onCreate方法引用的类'com.baseapp.eyeem.os.NfcHandler'
我的意思是,这个类确实存在,它只是它的一个空对象。
因为我们在XXHDPI设备上的应用程序是23mb,在ldpi Gingerbread 5mb上,我可以看到即时编译器(JIT)或其他一些运行时优化正在删除不必要的资源。 我想知道它是否与我的NfcHandler类相同,因为它是ICE_CREAM_SANDWICH
的注释,它会删除它。
所以问题是:
我的意思是,这个类确实存在,它只是它的一个空对象。
在API级别14中添加了NfcAdapter.CreateNdefMessageCallback
。因此,旧版设备上的Dalvik无法成功加载它,因为它将无法解析该接口。
现在,原则上,Dalvik绝不应该尝试在Gingerbread设备上加载你的NfcHandler
处理程序类,如果你上面显示的代码片段是你引用它的唯一地方,或者所有其他事件都有相同的if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
Java版本保护块保护它。
它表明,在这些设备上, Build.VERSION.SDK_INT
没有返回预期的值,原因可能是固件错误,或者可能是某些有根设备的用户为调整环境所做的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.