PHP-PHP如何完美解析APK信息?

PHP-PHP如何完美解析APK信息?

浮生未歇 发布于 2017-03-20 字数 77 浏览 1229 回复 5

我需要用php配合java完美解析APK的信息,比如说APK的版本,大小,icon等...

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

虐人心 2017-09-23 5 楼

第一种方案:通过安装PHP-JAVA-Bridge桥接方式,让PHP环境下可以执行JAVA。通过JAVA去解析APK包内的 AndroidManifest.xml文件,通过解析出来的XML可以取得上面所提到的相关信息。

第二中方案:在服务器上安装android-apktool 工具,通过aapt命令直接去解析apk包的信息

参考:http://www.oophp.cn/article/view/id/412 写的很具体

瑾兮 2017-09-04 4 楼

从网上找到的,不过找不到来源了,需要你的服务器端安装有AndroidSDK工具,并且可以被PHP运行,这个代码还可以获得应用的名称(application下的android:label)

function readApkInfoFromFile($aapt_file, $apk_file, $get_icon = false){
exec("{$aapt_file} d badging {$apk_file}", $out, $return);
$temp_path = FCPATH . 'cache/temp/'.md5($apk_file).'/';

if($return == 0){
@mkdir($temp_path);
$str_out = implode("n", $out);
$out = null;

#icon
if($get_icon){
$pattern_icon = "/icon='(.+)'/isU";
preg_match($pattern_icon, $str_out, $m);
$info['icon'] = $m[1];
if($info['icon']){
//$command = "unzip {$apk_file} {$info['icon']} -d " . $temp_path;
$command = '7z x "' . $apk_file . '" -y -aos -o"' . $temp_path . '" ' . $info['icon'];
//exit($command);
//mkdirs("/tmp/".$info['icon'],true);
exec($command);
$info['icon'] = $temp_path . $info['icon'];
}
}

#对外显示名称
$pattern_name = "/application: label='(.*)'/isU";
preg_match($pattern_name, $str_out,$m);
$info['lable']=$m[1];

#内部名称,软件唯一的
$pattern_sys_name = "/package: name='(.*)'/isU";
preg_match($pattern_sys_name, $str_out,$m);
$info['sys_name']=$m[1];

#内部版本名称,用于检查升级
$pattern_version_code = "/versionCode='(.*)'/isU";
preg_match($pattern_version_code, $str_out,$m);
$info['version_code']=$m[1];

#对外显示的版本名称
$pattern_version = "/versionName='(.*)'/isU";
preg_match($pattern_version, $str_out,$m);
$info['version']=$m[1];

#系统
$pattern_sdk = "/sdkVersion:'(.*)'/isU";
if(preg_match($pattern_sdk, $str_out,$m)){
$info['sdk_version']=$m[1];
if($info['sdk_version']){
$sdk_names = array(3=>"1.5",4=>"1.6",7=>"2.1",8=>"2.2",10=>'2.3.3',11=>"3.0",12=>"3.1",13=>"3.2",14=>"4.0");
if($sdk_names[$info['sdk_version']]){
$info['os_req'] = "Android {$sdk_names[$info['sdk_version']]}";
}
}
}

#权限
$pattern_perm = "/uses-permission:'(.*)'/isU";
preg_match_all($pattern_perm, $str_out,$m);
if(isset($m[1])){
foreach($m[1] as $mm){
$info['permissions'][] = $mm;
}
}

#需要的功能(硬件支持)
$pattern_features = "/uses-feature:'(.*)'/isU";
preg_match_all($pattern_features, $str_out,$m);
if(isset($m[1])){
foreach($m[1] as $mm){
$info['features'][] = $mm;
}
}

$info['apk_info'] = $str_out;
return $info;
}
return false;
}

灵芸 2017-05-25 3 楼

我的做法是通过写shell对aapt进行封装获取apk的信息,
比如:

import os
apk_info = os.popen(aapt_tools_path + 'aapt dump badging {0}'.format(apk_path)).readline()

apk_info里面是apk包所有信息,然后在通过程序分析出你想要的内容就可以了。
我是基于python写的后台程序,如果转换成php也是很容易的。

泛泛之交 2017-04-28 2 楼

apk解压可以完全使用PHP来完成,不需要外加java或者命令行工具。具体我有写了一个封装的类。可以解析apk文件中的压缩xml文件。

源代码在这里:http://blog.katcin.com/archives/69

虐人心 2017-04-02 1 楼

在服务器上安装android-apktool 工具,测试是否安装成功后,php通过exec或system来调用aapt命令直接去解析apk包的信息