Android SDK是否编译/链接到APK或安装在Android设备上?

vu8f3i0k  于 2022-12-09  发布在  Android
关注(0)|答案(2)|浏览(159)

首先是一些前提:

  1. Android应用程序使用Android SDK API类。
    1.类定义是一些代码或代码的一部分,它们被编译成机器码/字节码。
    1.我假设构成Android SDK API的所有(或大部分)类/包都列在下面:
    https://developer.android.com/reference/packages.htmlhttps://developer.android.com/reference/classes.html显示器
    这是很多!
    "现在的问题是“
    这些代码/数据驻留在哪里?它们是与应用代码沿着编译到APK文件中,还是存在于设备上的Android操作系统中,在这种情况下,应用应动态链接到它们?
    如果设备上存在这些版本,那么使用较新的Android SDK版本(例如,Android Studio中的compileSdkVersion)编译应用会有什么不同?
    假设“Android SDK Build-Tools”(与“SDK Platform”(根据“SDK Manager”窗口!)不同,它有自己的版本控制)负责编译您的代码,因此较新的版本意味着更好的字节码优化和更快的JAVA -〉DEX转换!?x1c 0d1x
    您编译Android应用程序并使用compileSdkVersion关键字设置其版本的“SDK平台”是否仅包含类声明和引用符号?!

Google API(例如GoogleMapAPI)如何?
Android支持库怎么样?

n1bvdmb6

n1bvdmb61#

Android SDK代码被烘焙到设备中,并且不是你的apk的一部分。
你需要通过gradle compile包含的东西进入你的apk(例如Support Library

mklgxw1f

mklgxw1f2#

Android核心SDK类由每个应用运行的Android运行时示例提供,您可以称之为Android虚拟机。当您的应用需要加载特定的Android框架类时,Classloader将通过类似于您提到的动态链接的过程为您加载该类。
要更改设备上运行的框架的版本,您可以做的事情不多,但是,您需要指定不同的minimumSdk和targetSdk的原因是,是让lint/编译器工具告诉您在特定的框架版本中,哪些函数/api在运行时可能不存在。else逻辑来提供替代功能,或者只是为了避免运行时出现ClassNotDefinedException或MethodNotFoundException。它基本上是一个开发工具,帮助您可视化与正在编译的版本不同的其他版本可能出现的错误。
当然,当你编译它的时候,它会以类似于引用一个包含的库的方式产生引用符号。VM类加载器会解析实际的文件,在运行时加载。不太清楚Google API是如何工作的,但是据我所知,在支持库的情况下,它也会被提供。

相关问题