gpt4 book ai didi

android - 从市场安装后,apk文件中的代码去了哪里?

转载 作者:搜寻专家 更新时间:2023-11-01 08:10:59 30 4
gpt4 key购买 nike

这是一件很有趣的事情。我有一个 APK 文件,com.company.app.apk。使用Eclipse安装到模拟器时,使用以下代码获取apk的文件名:

String fileName = activity.getPackageManager().getApplicationInfo(
activity.getPackageName(), PackageManager.GET_META_DATA).publicSourceDir;

我得到一个像这样的路径名 com.company.app-1.apk。文件大小和我建的apk文件一样。

现在,当我将此应用程序发布到 Market 并将其安装到真实设备 (Android 2.3) 时,相同的代码会返回如下路径名:com.company.app-2.zip。请注意,文件扩展名已更改为 .zip,最重要的是,文件大小明显小于原始大小。

现在,如果我将这两个文件传输到我的 PC 并使用 WinZip 打开它们,我发现了一件非常有趣的事情:

Eclipse 安装在模拟器上的那个和我预想的完全一样。即:代码(“com”文件夹)、资源(“res”文件夹)、签名(“META-INF”文件夹)、 Assets (“assets”文件夹)和 list 文件(AndroidManifest.xml)。而Market安装到真机上的只有资源和manifest文件两部分。

问题:我认为从 Market 安装时,.apk 文件被分成两个(或更多)文件。 ApplicationInfo.publicSourceDir 指向一个文件,它只包含资源。如何获取其他文件的路径名?

添加:我有同一个应用程序的两个版本,一个是使用 Google 的供应商许可服务付费的,另一个是免费的。上述现象只发生在付费版中。为什么?

更正: 当我说在第一种情况下安装的 apk 文件中存在 'com' 文件夹时,我应该更清楚。代码本身(*.java 文件)不在“com”文件夹中。事实上,“com”文件夹只包含一些垃圾文件,这些文件是在构建过程中无意中留下的。如果不是那些垃圾文件,我认为“com”文件夹一开始就不会存在。

最佳答案

我觉得你说的不对。市场的运作方式如下:您选择一个应用程序并按下按钮进行安装。在该市场向 gtalk 服务发送安装应用程序的 Intent 之后。此服务会下载您已上传到市场的 apk 文件,并在完成后安装此 apk。在安装过程中可能会发生一些变化。在我看来,在安装期间从应用程序中提取 classes.dex 文件,并从该文件中生成优化的 dex (.odex) 并将其放在单独的目录中。这就是您看到文件差异的原因。

关于android - 从市场安装后,apk文件中的代码去了哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9643461/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com