- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Log.d(TAG, "Build.VERSION_CODES.ICE_CREAM_SANDWICH: " + Build.VERSION_CODES.ICE_CREAM_SANDWICH);
我是这样写代码的,我是用sdk4.0编译这个android程序的,所以没有编译错误。当我在运行 android 2.3.4 的手机上运行这个程序时,它运行良好。
为什么?我很困惑版本 2.3.4(api 级别 10)有 Build.VERSION_CODES.ICE_CREAM_SANDWICH
属性?而且我用sdk2.3.4的时候会编译出错。
更多
我测试了下面这些代码,
private ScaleGestureDetector mScaleGestureDetector;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR_MR1) {
mScaleGestureDetector = new ScaleGestureDetector(this, new MyOnScaleGestureListener());
}
此代码将在 android 1.6 api level 4 上运行良好,但是
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR_MR1) {
Log.d(TAG, "getx(0): " + event.getX(0));
}
此程序在 android 1.6 api 级别 4 上运行失败。
它们都在 android 2.3.4 上运行良好。
为什么? (在 ScaleGestureDetector 类中也使用 event.getX(0)
(自 api 级别 5 起))
我测试了一些代码..
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Fragment f = new Fragment();
}
当我在 android 1.6 模拟器上运行它时它抛出 java.lang.VerifyError,但是在我运行 android 2.3.4 的手机上它抛出 java.lang.NoClassDefFoundError。
为什么??
最佳答案
这并不像看起来那么奇怪。它与 Java 如何处理原语的常量值有关。在编译期间,常量的值放在字节码中,而不是对实际常量的引用。
例如:
Log.d(TAG, "Build.VERSION_CODES.ICE_CREAM_SANDWICH: " + Build.VERSION_CODES.ICE_CREAM_SANDWICH);
实际上会被编译器翻译成:
Log.d(TAG, "Build.VERSION_CODES.ICE_CREAM_SANDWICH: " + 14);
因此删除了对实际常量(和类)的引用。
关于不为您运行的代码,它与 MotionEvent.getX(int n)
方法直到 api 级别 5 才可用有关。在此之前,多点触控是不支持,因此除了 getX()
之外不需要任何其他方法。
其实调用不存在的方法也没关系。在平台加载和验证类时出现错误。您很可能会在日志中收到 VerifyError,因为它会发现您在验证期间试图调用不存在的方法。
另一方面,如果您尝试使用一个不存在的类,您将得到一个 ClassNotFoundException。请注意,有时,即使文档没有说明,Android 中也存在一个类。有些类存在于 Android 的早期版本中,但直到后来才公开。有些人甚至走了另一条路。
所以:
尝试使用不存在的类 - ClassNotFoundException尝试使用存在的类上不存在的方法 - VerifyError
(在使用 Fragments 时,它们可用于早期版本的独立 Android Support Library )
关于安卓兼容性。使用 Build.VERSION_CODES 时我很困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200658/
我想在我的项目中使用这个库,但当我尝试打开这个 library (FloatingActionButton) 时出现错误来源来自 Github。 当我试图打开源代码来理解它时,我将这个项目下载为 zi
目前我正在开发 android,我正在使用 eclipse 工具。因为我想获得该项目可用的所有 android version_Codes 的列表。但目前我的工具/eclipse 只显示 versio
我对 Android API 的内部运作感到困惑。 如果我的应用程序是针对 Android 5.0 编译的,那么以下内容可以在运行 Android 5.0 及更高版本的设备上运行: if(Build.
我很困惑,因为 Build.VERSION_CODES.GINGERBREAD 行在我的代码中显示错误,但 Build.VERSION_CODES.ECLAIR 运行完美。有什么问题请告诉我... 这
Log.d(TAG, "Build.VERSION_CODES.ICE_CREAM_SANDWICH: " + Build.VERSION_CODES.ICE_CREAM_SANDWICH); 我是这
我正在创建 multiple apk's对于每个 ABI,我这样做是为了为每个 apk 分配单独的版本代码。 ext.abiCodes = ['armeabi-v7a':1, mips:2, x86:
我正在 eclipse 中开发一个 android 应用程序。我的 ide 显示了生成此行的提示。我将其添加到我的代码中: @TargetApi(Build.VERSION_CODES.GINGERB
我为 Android 4.4 安装了 SDK,创建了新的应用程序(manifest minSdkVersion=19 和 targetSdkVersion=19),但是这段代码不起作用 if (Bui
正如 this question 指出的那样以及我所做的一些测试,android.os.Build.VERSION_CODES 适用于比您正在使用的 VERSION_CODE 平台版本旧的平台版本。
有没有办法根据android包的version_code获取version_name? 例如:'com.nianticlabs.pokemongo'版本代码:2017121800 => version
这里的问题.. 提示问题 Not targeting the latest versions of Android; compatibility mode
我收到以下代码的错误无法解析或不是字段 Build.SUPPORTED_ABIS Build.FLAVOR Build.VERSION_CODES.LOLLIPOP 我已将最新的 SDK 升级到
我正在尝试实现一个 native 模块,该模块在 React Native 中提供连接服务。但我面临一个错误。由于我不是 android/java 开发人员,因此无法找到以下错误的原因。 E:\pro
我正在学习 udemy 上的类(class),其中讲师要求使用以下代码。 我尝试使用相同的代码,但遇到了多个错误。这是当我输入相同代码时 android studio 的样子。 首先,android
我正在学习 udemy 上的类(class),其中讲师要求使用以下代码。 我尝试使用相同的代码,但遇到了多个错误。这是当我输入相同代码时 android studio 的样子。 首先,android
我尝试在开发后构建我的 ionic 应用程序;但在这个过程中出现了以下错误: C:\incidentApp\platforms\android\app\src\main\java\com\moust\
尝试发布适用于 Android 的 React Native 应用程序,这两天令人悲伤,但收到此错误: > Task :react-native-device-info:compileReleaseJ
为什么我越来越 Cannot resolve symbol 'Q' 检查时if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)使用构建工具 29.0.
我从 sdk 级别 android.os.Build.VERSION_CODES.LOLLIPOP_MR1 知道我们得到 subscriptionInfoList 作为 subscriptionMan
我对 Android Studio 还很陌生。现在,我在向我的项目添加新模块(ChatSDK)后出现以下错误: Could not get unknown property 'VERSION_CODE
我是一名优秀的程序员,十分优秀!