我要求此确认我对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?
抱歉我的英语不好:(
答案 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
因操作系统版本而异。