2 heshiweij heshiweij 于 2016.03.29 11:25 提问

Android应用程序打包时,会将SDK中类的代码一起打包到apk中么? 1C

比如,我程序中用到ListView这个类,ListView来自于对应编译版本的sdk,那么在打包应用apk时,会将sdk中的ListView一起打包到apk中么。

换句话说:安装在手机上的应用,应用中用到的ListView是依赖手机系统?

再换句话说:安装在手机上的应用,用到的ListView,这个SDK提供的api的内部的代码逻辑,是跟着系统变化,还是在应用打包的时候就已经确定?

另外:这和Android的编译版本,目标版本之间有什么的关系呢?

5个回答

qq_28919337
qq_28919337   2016.03.29 11:27

这貌似打包的是class文件吧,我觉得和更新服务器是一个原理

cxh269083073
cxh269083073   2016.03.29 12:01

是根据android的编译版本有关系.目标版本是应用安装的手机版本.
例如:有些app更新后,低版本的手机就已经安装不上了.

weixin_31033993
weixin_31033993   2016.03.29 21:28

随系统,打包只是声明

cckker
cckker   2016.03.30 18:59

不会带在apk里面,用的系统的,所谓系统定制,就包括这些标准组件的默认外观。

它的代码在/system/framework/framework.jar里面,它包含了所有系统自带的标准组件,包括View、Button。。以及你说的ListView等。

这是android标准组件,编译器在编译时只是引用一下,能编译通过就行,实际上你的apk里面并没有这些标准组件的实现代码。

apk在设备里面启动后默认会将framework.jar加载进来,所以你的的apk运行的时候会有这些代码。

另外,android-support-v4.jar或者v7里面的扩展组件是会编译到apk里面去的,因为它并不是android的标准组件。

** android.jar是你建工程的时候默认引进去设置为不编译代码到apk里面的,它对应系统里面的framework.jar**

最直接验证的方法,用jd-gui反编译看下,你会发现里面只有你自己的代码和第三方jar包的代码:

图片说明

包不包含代码和编译版本、目标版本没关系

编译版本即你编译时使用的api版本(android.jar版本)

目标版本,系统不会对该版本做兼容处理,对更高版本会按照该版本的处理方式做兼容处理

cckker
cckker   2016.03.30 18:58

不会带在apk里面,用的系统的,所谓系统定制,就包括这些标准组件的默认外观。

它的代码在/system/framework/framework.jar里面,它包含了所有系统自带的标准组件,包括View、Button。。以及你说的ListView等。

这是android标准组件,编译器在编译时只是引用一下,能编译通过就行,实际上你的apk里面并没有这些标准组件的实现代码。

apk在设备里面启动后默认会将framework.jar加载进来,所以你的的apk运行的时候会有这些代码。

另外,android-support-v4.jar或者v7里面的扩展组件是会编译到apk里面去的,因为它并不是android的标准组件。

** android.jar是你建工程的时候默认引进去设置为不编译代码到apk里面的,它对应系统里面的framework.jar**

最直接验证的方法,用jd-gui反编译看下,你会发现里面只有你自己的代码和第三方jar包的代码:

图片说明

包不包含代码和编译版本、目标版本没关系

编译版本即你编译时使用的api版本(android.jar版本)

目标版本,系统不会对该版本做兼容处理,对更高版本会按照该版本的处理方式做兼容处理

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!