compileSdkVersion在选择实现和资源时有什么意义?

时间:2016-05-25 13:55:23

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

我要求此确认我对android中使用compileSdkVersion的理解。

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

所以假设谷歌添加了一种方法,说“公共虚空f1()'在android-22 / android.jar的Activity实现中,我使用compileSdkVersion 22编译我的代码,我从我的代码调用方法f1(),我将在Android版本20的设备中运行该应用程序。

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

当我在android studio中打开View.class文件并将compileSdkVersion设置为23时,我可以在导入列表中看到一个项目' android.widget.ScrollBarDrawable'。但是当我进去时(你的) sdk root)/Sdk/platforms/android-23/android.jar我找不到课程' ScrollBarDrawable'在widget小部件文件夹中(我遇到了很多这样的实现,这些实现在android sdk中没有这样的实现)

问题2:所以当apk打包从哪里打包apk构建器获取实现android.widget.ScrollBarDrawable.class?

抱歉我的英语不好:(

1 个答案:

答案 0 :(得分:2)

  

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

我会将其表达为:Activity的子类将根据该JAR文件中的Activity.class进行编译。除了内联到字节码中的final static int值等外,该JAR中没有任何内容与您的APK一起打包。

  

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

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

  

所以当apk打包从apk构建器获取实现android.widget.ScrollBarDrawable.class?

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

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