34.如何获取app(apk和ipa)中的资源

2023-05-16

移动互联网中,主要的两个平台是android和ios,android上文件的安装包是后缀名为apk的文件,ios上文件的安装包是后缀名为ipa的文件,在本文分析一下这两种文件的特点,以及如何用程序去解析这些安装包的资源。


1.    android的apk文件

(1) apk文件的结构

 

apk文件其实是zip格式,但后缀名被修改为apk,所以,把apk的文件后缀改为zip后,就能用压缩软件打开安装包。

打开apk文件后,可看到如下的文件结构,如图1:

 

                         图1

 

META-INF目录:存放的是签名信息,用来保证apk包的完整性和系统的安全。

 

lib目录:子目录armeabi存放的是一些so文件。

 

assets目录:存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。

 

res目录:放资源文件。包括图片,字符串等等。

 

AndroidManifest.xml:该文件是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息。

 

classes.dex:java源码编译后生成的java字节码文件(首先是java文件通过jdk编译成字节码文件然后经过dex编译成classes.dex)。

 

resources.arsc:编译后的二进制资源文件的索引(apk文件的资源表(索引))

 

(2) 如何获取apk文件的基本信息

 

要获取apk文件的基本信息(例如图标,应用名称,版本),可以使用android-apktool(我已打包上传到http://download.csdn.net/detail/newjueqi/7713025), 把里面的所有文件复制到/usr/local/bin/ 目录后,用如下命令就能获取apk的文件信息。

 

/usr/bin/sudo/usr/local/bin/aapt dump badging apk文件路径


执行的例子如图2:

 

                                                                           图2


从上面红框的三行,就能获取apk的版本号,名称,图标。

 

2.    ios的ipa文件

(1) ipa文件架构

 

ipa文件其实也是一个zip文件,把ipa后缀名改为zip后,就能把它打开,打开后首先看的是”payload”文件夹,进入”payload”文件夹就是”应用名.app”文件夹,进入这个文件夹后就是资源的位置。

 

         资源的例子,如图3所示:

 

 

_CodeSignature:文件的签名。

 

Info.plist: 被加密过的文件,应用名,版本,图标等信息都包含在这个文件中。

 

icon2.png,icon.png:不同尺寸的图标文件,也是被加密过的。

 

(2) 如何获取ipa文件的信息

 

在(1) 中已经提过了,ipa文件的信息是保存在Info.plist,用开源工具(https://github.com/rodneyrehm/CFPropertyList)就能把里面的内容解密。

 

简单的用法如下:

 

require_once(__DIR__.'/../classes/CFPropertyList/CFPropertyList.php');
 
$content =file_get_contents("/tmp/Info.plist");
$plist = new CFPropertyList();
$plist->parse($content);
var_dump( $plist->toArray() );

 

$plist这个数组的信息如下:

 
array(29) {
 'CFBundleName' =>
 string(12) "DataDemo"
 'DTXcode' =>
 string(4) "0511"
 'DTSDKName' =>
 string(11) "iphoneos7.1"
 'DTSDKBuild' =>
 string(6) "11D167"
 'CFBundleDevelopmentRegion' =>
 string(2) "en"
 'CFBundleVersion' =>   //版本号
 string(3) "2.0"
 .........
  'CFBundleDisplayName' => //应用名称
 string(12) "DataDemo"
 .........
 array(1) {
   'CFBundlePrimaryIcon' =>
   array(1) {
     'CFBundleIconFiles' =>  //图标文件
     array(2) {
       [0] =>
       string(5) "icon2"
       [1] =>
       string(4) "icon"
     }
}


 

在这个数组中,关键的部分如下:

 

'CFBundleVersion':版本号

'CFBundleDisplayName':应用名称

'CFBundlePrimaryIcon'->'CFBundleIconFiles':图标文件

 

根据这里的图标名称,在ipa文件中找到加密过的图标文件。使用开源工具(https://github.com/pcans/PngCompote),就能把加密过的图标文件还原。

 

Pngcompote的用法:

 

require_once 'pngCompote.php';
$filename = 'Lenna.crush.png'; //需要解密的文件路径
$newFilename = 'Lenna.compote.png'; //解密后的文件路径
 
$png = new PngFile($filename);
if ($png->revertIphone($newFilename)) {
       echo 'cleaning done!'.PHP_EOL;
       echo '<img src="'.$newFilename.'"/>'.PHP_EOL;
}


 

----------------------------------------------------------

        本人把网络上发表的一系列“app后端”文章加以整理并增加了运维和架构方面的内容,出版了书籍《App 后台开发运维和架构实践》,该书已在京东,当当和亚马逊上销售。

《App后台开发运维和架构实践》的购买链接

京东

京东 
当当 
亚马逊 
互动出版网 
天猫



-------------------------------------------------------------------------------------------------

打开链接  app后端系列文章总目录 总目录 ,能查看本人发表过的所有原创“app后端”文章。

【作者】曾健生
【QQ】190678908
【app后端qq群】254659220 
【微信公众号】 appbackend
【新浪微博】 @newjueqi
【博客】http://blog.csdn.net/newjueqi 


 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

34.如何获取app(apk和ipa)中的资源 的相关文章

  • 4.app是怎么炼成的

    很多刚进入app后端的小伙伴 xff0c 有的是之前没有接触过这个行业 xff0c 有的是只在学校学习了基本的技术知识 xff0c 不知道开发app的整个流程是怎么样的 xff0c 因此心里会有一股恐惧 听着别人口中的一大串app相关的术语
  • 5.两分钟让你明白app后端有啥用

    app后端 xff0c 也称为app后台 xff0c 称呼不一样 xff0c 但指的是同一个东西 我一直都以app后端有啥用这个问题不用解释 但在网络上 xff0c 有准备进行app创业的网友 xff08 是从传统行业过来的 xff09 问
  • 6.app架构基础

    app架构 xff0c 一个听起来高大尚的名字 xff0c 很多小伙伴听到这个词语感觉很迷茫 xff0c 不知道架构具体说的是啥 xff1f 在 xff51 群里 xff0c 34 app后端应该怎么架构 34 这个问题被问了无数次 通过阅
  • MSCKF

    主要数据结构 xff1a StateServer当前里程计状态 imu状态 若干相机位姿 状态协方差矩阵 噪声协方差 struct StateServer IMUState imu state CamStateServer cam stat
  • 7.app和app后端的通讯

    经常有开发者问 xff1a app和后端通讯是用http协议还是私有的协议 xff1f 是用长连接还是短连接 xff1f 通过阅读本文 xff0c 帮你解除上面的疑问 xff08 1 xff09 是用http协议还是私有的协议 xff1f
  • 8.app后端和web后端的区别

    很多从web后端转到app后端的小伙伴经常很茫然 xff0c 不知道这两者之间有啥区别 本文通过例子 xff0c 分析web后端和app后端的区别 xff0c 使各位更好地把握app后端的架构 1 app后端要慎重考虑网络传输的流量 xff
  • 9.app后端选择什么服务器

    对于很多刚入行的朋友来说 xff0c 不清楚应该选择什么样的服务器提供商 xff0c 是选择传统的IDC 租用服务器租用机柜 xff0c 还是选择现在很火的云服务器呢 xff1f 在本文中 xff0c 通过对比传统的IDC和云服务 xff0
  • 10.app后端选择什么开发语言

    在qq上 xff0c 经常看到有创业团队的创始人一直都招不到技术人员 xff0c 除了项目的因素外 xff0c 很大的原因就是所需要掌握的开发语言偏门 通过阅读本文 xff0c 详细了解选择开发语言的核心原则 xff0c 使各位心里对开发语
  • 11.如何快速进门新技术

    在app后端的工作中 xff0c 经常会接触到新的技术 作为一名后端人员 xff0c 面对开发的压力 xff0c 快速地入门新的技术 xff0c 融入到项目当中 xff0c 这已经成了一个后端人员的必备技能 在这篇文章 xff0c 根据总结
  • 12.app后端如何选择合适的数据库产品

    app后端的开发中 xff0c 经常要面临的一个问题是 xff1a 数据放在哪里 mysql xff1f redis xff1f mongodb xff1f 现在有这么多优秀的开源数据库产品 xff0c 怎么根据业务场景来选择合适的数据 常
  • 13.app后端为什么要用到消息队列

    很多没有实际项目经验的小伙伴 xff0c 对消息队列系统非常陌生 xff0c 看着很多架构的介绍中 xff0c 都提到消息队列 但是 xff0c 不知道为什么要用消息队列 xff1f 什么是消息队列 xff1f 常见的消息队列产品有哪些 x
  • 14.app后端如何设计api

    app和后端的交互 xff0c 一般都是通过后端提供的api实现 api的设计 xff0c 估计很多刚进入app后端的小伙伴会一无头绪 xff0c 不知道怎么入门 下面根据自己3年的app后端经验 xff0c 总结出下几个api设计原则 x
  • 15.app后端怎么设计用户登录方案

    在很多app中 xff0c 都需要用户的登录操作 登录 xff0c 就需要用到用户名和密码 为了安全起见 xff0c 暴露明文密码的次数越少越好 怎么能最大程度避免泄露用户的密码呢 xff1f 在登录后 xff0c app后端怎么去验证和维
  • Struts 1 中DispatcherAction类原理浅析

    文章标题 Struts 1 中 DispatcherAction 类原理浅析 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者声明 本人水平有限 xff0c 失误之处 xf
  • Python 高级编程技巧 第二讲 内置不可变类型并修改其实例化行为、slots属性、contextmanager上下文管理器、创建可管理对象属性、类比较操作

    第二讲 一 如何派生内置不可变类型并修改其实例化行为 这里有一道练习题 xff0c 我们想定义一个新类型的元组 xff0c 对于传入的可迭代对象 xff0c 我们只保留其中int类型并且值还要大于0 或许我们可以这么写 xff0c 尝试一下
  • 16.app后端如何保证通讯安全--url签名

    app和后端的通讯过程中 xff0c api请求有可能被别人截取或不小心泄露 那么 xff0c 怎么保证api请求的安全呢 xff1f 在这篇文章中 xff0c 介绍一种常见的保证api请求安全的做法 url签名 1 url签名详解 在前一
  • 17.app后端如何保证通讯安全--aes对称加密

    在上文 16 app后端如何保证通讯安全 url签名 提到 xff0c url签名有两个缺点 xff0c 这两个缺点 xff0c 如果使用对称加密方法的话 xff0c 则完全可以避免这两个缺点 在本文中 xff0c 会介绍对称加密的具体原理
  • 18.app后端如何实现LBS

    移动互联网 xff0c 除了一直在线这个特点外 xff0c 还有一个重要特点 xff0c 能定位到手机的位置 查找附近的人 附近的餐馆等服务 xff0c 以及大量的o2o应用 都需要使用LBS Location Based Services
  • 19.最省钱的app发短信方法

    在创业团队中 xff0c 一个重要的原则是能省就省 xff0c 该花就花 xff0c 把银子用在刀刃上 现在的app xff0c 为了获取用户的社交关系 xff0c 需要用户的手机号注册 用手机号注册就涉及到一个发送短信验证码的问题 xff
  • 20.如何从app业务逻辑提炼api接口

    在app后端的工作中 xff0c 设计api是一个很考验设计能力的工作 在项目的初始阶段 xff0c 只知道具体的业务逻辑 xff0c 那怎么把业务逻辑抽象和提炼 xff0c 设计出api呢 xff1f 通过阅读本文 xff0c 可解答以上

随机推荐

  • 21.app后端如何高效更新内容

    在app的主页或通知栏 xff0c 经常需要通过api取最新的数据 那么 xff0c 怎么在这部分上做优化 xff0c 使获取内容的效率更高呢 xff1f 在本文中 xff0c 通过推拉和增量更新 xff0c 实现了一种高效获取数据的策略
  • 22.在创业公司中的成长

    在 app后端 qq群中 xff0c 经常被问到的一个问题 xff1a 怎么设计一个应付高并发的架构 诚然 xff0c 设计一个能应付百万流量的高并发架构 xff0c 是很令人兴奋的技术挑战 xff0c 但在创业公司中的成长 xff0c 难
  • 23.app后端如何架设文件系统

    现在app展现内容的形式多种多样的 xff0c 有文字 xff0c 图片 xff0c 声音 xff0c 视频等等 xff0c 其中文件占了一个很大的比重 随着app不断运营 xff0c 文件会越来越多 xff0c 占用的磁盘空间也不断增大
  • 24.从公众号筹集10万股份学到的商业化思维

    1 忽然间看到了卖公众号的股份的玩法 昨天 xff0c 在公众号 老鹰说 id joeytalks 看到了他要弄一个新的玩法 xff0c 卖公众号的股份 xff0c 熟人1000块一股 xff0c 陌生人2000块一股 当时不以为然 xff
  • 25.创业真的需要app吗?真的需要外包吗?

    两个星期前 xff0c 一名亲戚的朋友打算投入自己的二十多万元去搞个摄影社交app xff0c 问我有没有靠谱的外包推荐 xff0c 我赶紧劝住他 xff0c 现在app的成本已经非常高了 xff0c 初期的研发就要十几万 xff0c 加上
  • HarmonyOS鸿蒙的测试体验

    HarmonyOS 2 0手机开发者Beta公测招募 xff0c 申请开发者账号 xff0c 报名 xff0c 就可以抢先体验 除了抢先体验 xff0c 使用真机测试外 xff0c 使用模拟器也可以尝试体验 那测试人员可以使用HVD和Clo
  • 单点登录 Ucenter 分析

    原文 xff1a http blog csdn net ebw123 article details 9417231 首先我们先来了解下 Ucenter登录步骤 1 用户登录discuz xff0c 通过logging php文件中的函数u
  • 当Ucenter和应用通信失败

    http blog sina com cn s blog 775f158f010135uz html 失败是常见的 对于初次接触Ucenter的人来讲 xff0c 添加一个自己的应用最头疼的就是发现通信失败 如果要解决这个问题 xff0c
  • 26.app后端怎么架设推送服务

    推送服务已经是app的标配了 架设推送服务 xff0c 除了可以使用第三方服务商外 xff0c 也有大量的开源技术可以选择 现在推送主要分两块 xff0c android推送和ios推送 xff0c 在下面分别论述 xff1a 1 Andr
  • 27.app后端搭建聊天服务器的经历

    现在 xff0c 聊天功能已经成了社交app的标配了 但是 xff0c 众多web开发出生的程序员对聊天相关的服务的不了解 xff0c 带来了很多开发上的困扰 在这篇文章中 xff0c 根据下面3个方面 xff0c 谈谈聊天服务 1 聊天服
  • 29.满大街创业团队的年代,一不小心就被忽悠

    长期呆在创业团队中 xff0c 我人品不咋的 xff0c 遇到过各种坑人的项目和团队 下面讲讲3件坑人的事情 1 不靠谱的项目 在第二个创业项目失败后一个星期 xff0c 以前的UI andy忽然找上我 xff0c 有个老板想投资个项目 x
  • (转)cookie和session机制之间的区别与联系

    出处为中国JAVA手机网 lt www cnjm net gt http www cnjm net tech article1113 html 具体来说cookie机制采用的是在客户端保持状态的方案 它是在用户端的会话状态的存贮机制 xff
  • 30.因为绘画,我在豆瓣上认识了老婆

    导读 xff1a 这篇文章的上半部分 xff0c 是我2011年在豆瓣上发表的 五天学会绘画 书评 xff0c 我和老婆就相识于这个书评 后记部分 xff0c 是对绘画 xff0c 和用互联网方法找女友的一些思考 五天学会绘画 xff0c
  • 对太极拳中的“势”有所领悟

    文章标题 对太极拳中的 势 有所领悟 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 今天帮一个亲戚搬杂物 xff0c 从三楼的杂物房搬到一楼的花园 开始领悟 势 是搬一个很重
  • 本人写的Android上RSS阅读器简单介绍

    文章标题 本人写的 Android 上 RSS 阅读器简单介绍 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 个人博客 http blog csdn net newjueqi
  • 整合 ucenter 注册自动激活

    http my oschina net banbo blog 311691 应用整合 UCenter xff0c 同步注册到 Discuz 的用户 xff0c 在 Discuz 登录时得手动激活 xff0c 用户体验很不好 xff0c 不过
  • switch case语句用法详解

    switch 开关 的意思 xff0c 是一种 选择 语句 xff0c 它用法非常简单 switch 是多分支选择语句 说得通俗点 xff0c 多分支就是多个 if语句的组合 从功能上说 xff0c switch 语句和 if 语句完全可以
  • 32.APP后端处理表情的一些技巧

    app应用中文字夹带表情是个很常见的现象 甚至一些40多岁的大叔级用户 xff0c 也喜欢在自己的昵称中夹带表情 xff0c 在产品运营后发现这个现象 xff0c 彻底颠覆了我的世界观 在后台处理表情的时间 xff0c 我遇到过下面3个问题
  • 33.APP后端处理视频的方案

    在当前的app应用中 xff0c 到处都能看到视频的身影 xff0c 例如 xff0c 在社交类的app上 xff0c 用户可以拍摄属于自己的小视频 xff0c 并发布到相应得栏目 xff0c 增加和好友们互动的机会 后台常见的视频处理有以
  • 34.如何获取app(apk和ipa)中的资源

    移动互联网中 xff0c 主要的两个平台是android和ios xff0c android上文件的安装包是后缀名为apk的文件 xff0c ios上文件的安装包是后缀名为ipa的文件 xff0c 在本文分析一下这两种文件的特点 xff0c