compileSdkVersion 在选择实现和资源方面有什么意义?
What is the significance of compileSdkVersion in selecting implementations and resources?
我问这个是为了确认我对在 android.
中使用 compileSdkVersion 的理解
Android sdk 为路径下的每个版本提供实现(您的 sdk 根目录)/Sdk/platforms/android-(sdk 版本)。因此,如果您将 compileSdkVersion 设置为 20,并且添加一个class 在您的代码中扩展 Activity,在构建 apk 之后,apk 将使用从(您的 sdk 根目录)/Sdk/platforms/android-20/andriod.jar 中获取的 Activity.class 实现进行打包.
所以假设 google 在 android-22/android.jar 中的 Activity 实现中添加了一个方法 say 'public void f1()' 并且我使用 compileSdkVersion 22 编译我的代码并且我正在调用我的代码中的方法 f1(),我将在 android 版本 20.
的设备中 运行 应用程序
问题 1:如果方法 f1() 是一个 java 层方法而不是调用 C/C++ 实现的方法,它会在设备中正确 运行 吗?
当我在 android 工作室中打开 View.class 文件并将 compileSdkVersion 设置为 23 时,我可以在导入列表中看到一个项目 'android.widget.ScrollBarDrawable'。但是当我进去时 (你的 sdk root)/Sdk/platforms/android-23/android.jar 我永远无法在小部件文件夹中找到 class 'ScrollBarDrawable'(我遇到了许多这样的实现,这些实现在 android 像这样的 sdk)
问题 2:那么当 apk 被打包时,apk 构建器从哪里获得实现 android.widget.ScrollBarDrawable.class?
对不起我的英语不好:(
after building apk the apk will be packaged using Activity.class implementation taken from (Your sdk root)/Sdk/platforms/android-20/andriod.jar
我会这样表述:您的 Activity
的子 class 将针对该 JAR 文件中的 Activity.class
进行编译。该 JAR 中的任何内容都不会与您的 APK 打包在一起,除了内联到字节码中的 final static int
值等。
If the method f1() is a java layer method and not something which calls C/C++ implementations , will it run properly in the device?
否,如果旧设备上不存在该方法。
So when apk is packaged from where does the apk builder get the implementation android.widget.ScrollBarDrawable.class?
"apk builder"既不知道也不关心这样的class,因为class不在AndroidSDK中。
在设备上,不同的 JAR 是应用程序 class 路径的一部分,其中包含 Activity
等的实际实现。该 JAR 是否包含隐藏的 android.widget.ScrollBarDrawable
可能会因 OS 版本而异。
我问这个是为了确认我对在 android.
中使用 compileSdkVersion 的理解Android sdk 为路径下的每个版本提供实现(您的 sdk 根目录)/Sdk/platforms/android-(sdk 版本)。因此,如果您将 compileSdkVersion 设置为 20,并且添加一个class 在您的代码中扩展 Activity,在构建 apk 之后,apk 将使用从(您的 sdk 根目录)/Sdk/platforms/android-20/andriod.jar 中获取的 Activity.class 实现进行打包.
所以假设 google 在 android-22/android.jar 中的 Activity 实现中添加了一个方法 say 'public void f1()' 并且我使用 compileSdkVersion 22 编译我的代码并且我正在调用我的代码中的方法 f1(),我将在 android 版本 20.
的设备中 运行 应用程序问题 1:如果方法 f1() 是一个 java 层方法而不是调用 C/C++ 实现的方法,它会在设备中正确 运行 吗?
当我在 android 工作室中打开 View.class 文件并将 compileSdkVersion 设置为 23 时,我可以在导入列表中看到一个项目 'android.widget.ScrollBarDrawable'。但是当我进去时 (你的 sdk root)/Sdk/platforms/android-23/android.jar 我永远无法在小部件文件夹中找到 class 'ScrollBarDrawable'(我遇到了许多这样的实现,这些实现在 android 像这样的 sdk)
问题 2:那么当 apk 被打包时,apk 构建器从哪里获得实现 android.widget.ScrollBarDrawable.class?
对不起我的英语不好:(
after building apk the apk will be packaged using Activity.class implementation taken from (Your sdk root)/Sdk/platforms/android-20/andriod.jar
我会这样表述:您的 Activity
的子 class 将针对该 JAR 文件中的 Activity.class
进行编译。该 JAR 中的任何内容都不会与您的 APK 打包在一起,除了内联到字节码中的 final static int
值等。
If the method f1() is a java layer method and not something which calls C/C++ implementations , will it run properly in the device?
否,如果旧设备上不存在该方法。
So when apk is packaged from where does the apk builder get the implementation android.widget.ScrollBarDrawable.class?
"apk builder"既不知道也不关心这样的class,因为class不在AndroidSDK中。
在设备上,不同的 JAR 是应用程序 class 路径的一部分,其中包含 Activity
等的实际实现。该 JAR 是否包含隐藏的 android.widget.ScrollBarDrawable
可能会因 OS 版本而异。