【问题标题】:What is the significance of compileSdkVersion in selecting implementations and resources?compileSdkVersion 在选择实现和资源时有什么意义?
【发布时间】:2016-05-25 13:55:23
【问题描述】:

我问这个是为了确认我对在 android 中使用 compileSdkVersion 的理解。

Android sdk 在路径 (Your sdk root)/Sdk/platforms/android-(sdk version) 下为每个版本提供了实现。因此,如果您将 compileSdkVersion 设置为 20 并且如果您在您的代码,在构建 apk 之后,apk 将使用从(您的 sdk 根目录)/Sdk/platforms/android-20/andriod.jar 获取的 Activity.class 实现打包。

所以假设谷歌在 android-22/android.jar 的 Activity 实现中添加了一个方法说“public void f1()”,我用 compileSdkVersion 22 编译我的代码,我从我的代码中调用方法 f1() 和我将在 android 版本 20 的设备上运行该应用程序。

问题1:如果f1()方法是java层的方法而不是调用C/C++实现的东西,它会在设备中正常运行吗?

当我在我的 android studio 中打开 View.class 文件并将 compileSdkVersion 设置为 23 时,我可以在导入列表中看到一个项目 'android.widget.ScrollBarDrawable'。但是当我进入 (Your sdk root)/Sdk /platforms/android-23/android.jar 我永远无法在小部件文件夹中找到“ScrollBarDrawable”类(我遇到了许多这样的实现,这些实现在 android sdk 中不存在)

问题2:那么当apk被打包时,apk builder从哪里得到实现android.widget.ScrollBarDrawable.class?

对不起我的英语不好:(

【问题讨论】:

    标签: android android-studio android-version android-components


    【解决方案1】:

    在构建 apk 之后,apk 将使用从(您的 sdk 根目录)/Sdk/platforms/android-20/andriod.jar 获取的 Activity.class 实现打包

    我将其表述为:Activity 的子类将针对该 JAR 文件中的 Activity.class 进行编译。除了 final static int 值和内联到字节码中的类似值外,该 JAR 中的任何内容都不会与您的 APK 一起打包。

    如果 f1() 方法是 java 层方法,而不是调用 C/C++ 实现的东西,它会在设备中正常运行吗?

    不,如果旧设备上不存在该方法。

    那么当apk被打包的时候,apk builder从哪里获取android.widget.ScrollBarDrawable.class的实现呢?

    “apk builder”既不知道也不关心这样的类,因为该类不在 Android SDK 中。

    在设备上,不同的 JAR 是应用程序类路径的一部分,其中包含Activity 的实际实现等等。该 JAR 是否包含隐藏的 android.widget.ScrollBarDrawable 可能会因操作系统版本而异。

    【讨论】:

    • 非常感谢你..让我大开眼界
    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 2017-09-07
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2016-01-04
    相关资源
    最近更新 更多