Java程序从apk和ipa中获取资源

需求:


给一个apk或者ipa,通过Java代码获取该包的图片、版本号、包名、大小等信息

知识储备:


 Java:File文件读写操作、ZipFile文件读写操作、IO输入输出流、调用shell命令...

 Android:aapt查看apk内容,对其内容的了解。

 iOS:info.plist文件的结构。

使用GetApkInfo.jar


1、配置工程的build path,将apptool.jar、ipa-parse.jar两个文件导入工程中。

2、将mac版和windows版的的aapt文件均放在工程中的/bin目录里。

获取apk资源原理:(一般有两种方式)


1、获取AndroidManifest.xml文件,解析.xml后获取相应版本号、包名等信息。使用apktool工具,apk进行反编译后获取破解的.xml文件,如果不反编译,直接将.apk改为.zip文件,得到的.xml文件是被加密,打不开的。

2、直接使用Android SDK中build-tools目录下的appt文件,在shell里面调用aapt命令对apk进行编译。命令如下:aapt dump badging xxx.apk

常用的为第二种方法,需要处理的数据比较简单,第一种方法由于apktool工具有版本限制,如果使用旧版本可能反编译不了最新的apk,而且.xml的信息需要额外到res资源下去获取,例如应用程序的名字,在.xml里面保存的仅是ID号,得另外在res/里面找到String.xml,根据ID号去获取真正的名字,较为麻烦。而且不是每个apk都能用apktool反编译,很多apk经过处理就不行了。

图片的获取:使用第二种方法已经能获取大部分资源,不过都是以字符串形式,所以想要获取图片的话,得额外处理。利用ZipFile根据apk生成zip格式的文件,然后解压zip,取得file。根据图片的路径(名字)来到file里面找到相应图片。(iOS系统获取图片通用)

获取ipa资源原理:


ipa资源的获取相对于apk来说较为简单,因为iOS把很多信息都直接保存在info.plist文件里面,利用ZipFile根据ipa生成zip格式的文件后解压,直接找到info.plist即可。注意,iOS系统有分iPhone和iPad两种设备,其在.plist的字段名也不一样。可以根据.plist里面的deviceFamily字段来判断是什么设备,1为iphone,2为ipad,数组1,2则为通用。常用字段如下:

应用名称:CFBundleDisplayName,如果没有则为CFBundleName

版本号:CFBundleVersion

包名:CFBundleIdentifier

最小系统:MinimumOSVersion

iPhone图标的字段:

CFBundleIcons                                    dic字段

         CFBundlePrimaryIcon                 dic字段

                   CFBundleIconFiles            array字段

                             arr[0]

iPad图标的字段:

CFBundleIcons~ipad

          CFBundlePrimaryIcon

                   CFBundleIconFiles

                             arr[0]

解析.plist时由于字段用的是iOS的方法, 因此我们需要导入能使用iOS方法的.jar包,在configure build path里面配置。链接在后面,使用方法如下:

// xxx表示要解析的plist文件

NSDictionary rootDict = (NSDictionary) PropertyListParser.parse(xxx);

// CFBundleIdentifier表示要获取的字段,

NSString parameters=(NSString) rootDict.objectForKey("CFBundleIdentifier");

// 还要将获取到的字段转化成Java语法

String str = parameters.toString()

ipa文件中获取图片资源的方法同apk一样。

API说明:


初始化apk / ipa的信息

功能描述:初始化apk/ipa的信息

函数原型:

newGetAppInfo(String appPath) ;

参数说明:

apk或者ipa的绝对路径

返回结果:

获取apk/ipa的信息

功能描述:记录apk/ipa的信息

函数原型:

ApkInfo.getInstance().getXXX() ;

参数说明:

ApkInfo为单例,getInstance()为实例化

返回结果:

getXXX()表示返回的的版本号、应用名字、包名等信息(String格式)

注意:只有照片是byte[]格式,其它都是String格式

记录apk/ipa的信息

功能描述:获取apk/ipa的信息

函数原型:

ApkInfo.getInstance().setXXX(String str) ;

(ApkInfo为单例,getInstance()为实例化)

参数说明:

str表示需要记录的版本号、应用名字、包名等信息(String格式)

注意:只有照片是byte[]格式,其它都是String格式

返回结果:

将图片从byte[]格式转化为.png格式

功能描述:将图片从byte[]格式转化为.png格式

函数原型:

ImageUtil.byte2image(byte[] data,String path)

参数说明:

byte[] data:表示需要转化的图片byte[]

path:表示转化后图片的路径

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容