通过PHP怎样取到android系统下apk应用的包名,版本号等信息
公司项目关系,要求在通过PHP解析android系统应用apk包内的一切可用的信息。比如说:APK包名,版本号,版本名,安装权限等一系列关于对应包的信息。通过google查找相关的解决方案,都没有找到很有效的解决方案。但取得了解决此问题的思路。
目前就我所了解,有二种方案:
第 一:通过安装PHP-JAVA-Bridge桥接方式,让PHP环境下可以执行JAVA。通过JAVA去解析APK包内的 AndroidManifest.xml文件,通过解析出来的XML可以取得上面所提到的相关信息。第二:在服务器上安装android-apktool 工具,通过aapt命令直接去解析apk包的信息。
有了相关思路,我就按照上面的二种思路去尝试解决问题。
第一种方案,
a.在服务器上安装成功了PHP-JAVA-Bridge扩展 。环境是成功配置完成后。
b.按照思路就是能过JAVA去调用这个包
http://code.google.com/p/android4me/source/browse/src/android4me/res/AXMLParser.java
c.把解析出来的信息存成本地文件,再用正则表达式去剥到我们相要的信息.
d.写进数据库,就完成了我们想要信息。
可是我遇到的问题是,由于我对JAVA知识涉及不太多(BS一下自己能力),项目时间和进度要求又太紧。公司相关的同事也不太了解。所以这个方案被我否定了。留下有时间再研究怎么用。
接下来我重点说一下第二种方案(已在系统中成功运行@_@)
第二种方案:
a.在服务器上安装android-apktool,我们服务器是CentOS5.5,所以我选择的包是:apktool-install-linux-2.2_r01-1.tar.bz2
。再执行安装(参考安装说明),
1.# Linux:
2. 1. Download apktool-install-linux-* file 【下载文件】
3. 2. Download apktool-* file 【下载文件】
4. 3. Unpack both to /usr/local/bin directory (you must have root permissions)【在/usr/local/bin解压,需要有root权限】
执行命令:
1.$tar-jxvf apkktool-install-linux-2.2_r01-1.tar.bz2
b.测试aapt命令是否可用。执行命令:
1.$ aapt d badging test.apk
如果你能成功看到类似如下输出,则说明你已成功安装android-apktool。

c.利用PHP的函数exec去执行aapt命令。
一般PHP环境,默认是不允许exec,shell_exec等shell命令函数的。所以我们得更改php.ini配置文件。关于开启此函数方法,朋友
们可以自己去查找一下,很简单的。请注意:开启exec函数功能,可能会对服务器安全有比较大的隐患,所以请自行决定是否可行。
写一个test.php文件
1.<?php
2.exec("/usr/bin/sudo /usr/local/bin/aapt d badging /var/www/test/test.apk>info.txt 2>&1",$out,$return);
3.//用root 去执行aapt命令,把输出的信息写入info.txt文件,下面我们要用用正则取输出的相关数据
4.var_dump($out);
5.var_dump($return);
6.?>
在这里请一定注意二点:
1.你的WEB用户权限是否有执行aapt的权限,如果没有,请用visudo修改sudo的配置文件,在最后加入这样一行:
1.www ALL=NOPASSWD:/usr/local/bin/aapt(让www用户以root权限来执行aapt,NOPASSWD代表sudo时候不用输入密码).
2.PHP脚本执行sudo时,可能会报出:sudo: sorry, you must have a tty to run
sudo错误,提示需要一个终端才能执行sudo.此时解决办法,用visduo命令,找到Defaults
requiretty这行前面加#号它注解掉。
d.正则表达式取到我们想要的任何信息。
e.写入数据库,搞定!
到这里,我们就实现了APK包信息的读取功能,算是达到我们想要的功能。但就这方式,不是我理想中的解决方式。我最理想中的解决方案就是用JAVA去解决这个问题。不过暂时,也只能这样做。
可参考的相关网站信息列表有:
http://stackoverflow.com/questions/3014369/php-how-to-get-version-from-android-apk-file
http://code.google.com/p/android-apktool/
http://code.google.com/p/android4me/source/browse/src/android4me/res/AXMLParser.java
http://www.weizhifeng.net/?p=307
http://linux.chinaunix.net/bbs/viewthread.php?tid=901336
http://leven.blog.51cto.com/1675811/326150
通过PHP怎样取到android系统下apk应用的包名,版本号等信息的更多相关文章
- (原)android系统下绑定Server的时候报MainActivity has leaked ServiceConnection的错误
今天在android系统下根据官方的demo代码,我们需要启动一个服务,并绑定,但在程序启动以后,老是报错: Activity MainActivity has leaked ServiceCon ...
- iTOP-iMX6开发板Android系统下LVDS和HDMI双屏异显方法
迅为iMX6 开发板 android 系统下 LVDS 和 HDMI 双屏异显的使用过程. 注意,iTOP-iMX6 开发板的 android 系统想要实现对 LVDS 和 HDMI 双屏异显功能的支 ...
- Linux 系统下用源码包安装软件
Linux系统下用源码包安装软件 by:授客 QQ:1033553122 下载源码安装包,解压或者直接双击打开(如果有安装zip或rar等压缩/解压缩软件的话),查找相关的安装说明文件,一般是READ ...
- android studio无法识别含有rcs包名的jar
http://blog.csdn.net/JingleYe/article/details/70048943 android studio无法识别含有rcs包名的jar android stu ...
- 【Android Studio安装部署系列】二十七、Android studio修改项目名称和包名
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 实际项目开发中可能碰到项目名称写错了或者需要修改,而且包名可能也想要修改,那么如何操作呢. 本文是在Android Studio3. ...
- Android 获取包名,版本信息
Android 获取包名,版本信息及VersionName名称 <span style="font-size: 14px;">private String ge ...
- Android系统下的动态Dex加载
1 问题在Android系统中,一个App的所有代码都在一个Dex文件里面.Dex是一个类似Jar的存储了多有Java编译字节码的归档文件.因为Android系统使用Dalvik虚拟机,所以需要把使用 ...
- Android系统下的动态Dex加载与app速度优化
1 问题 在Android系统中,一个App的所有代码都在一个Dex文件里面.Dex是一个类似Jar的存储了多有Java编译字节码的归档文件.因为Android系统使用Dalvik虚拟机,所以需要把 ...
- Android系统下app测试功能点
一.安装卸载 1.验证app能否正常的安装启动运行,安装后的文件夹及文件是否写到了指定的目录里,卸载后相关文件是否清除 2.软件安装/卸载过程中意外情况的处理是否符合需求(如死机,重启,断电) 3.安 ...
随机推荐
- 非常适合新手的jq/zepto源码分析05
zepto的原型 $.fn 属性: constructor //构造行数 forEach: emptyArray.forEach, //都是原生数组的函数reduce: emptyArray.re ...
- CentOS 7: 配置Network
Command Mode Step 1 » Network interface config files are located in /etc/sysconfig/network-scripts/ ...
- CentOS和Window互相远程桌面方法
1)VNC服务器配置 (CentOS 5.x安装GNOME桌面环境) # yum groupinstall "GNOME Desktop Environment(CentOS 6.x安装G ...
- Solidworks如何导入和使用模板文件
将模板文件拷贝到Solidworks目录(可以是任意目录) 点击工具-选项-文件位置,然后把文件夹添加进去 新建文件的时候选择高级模式,然后就会看到已经出现了我们导入的模板文件 ...
- ios oc 代码 转换为 c++ 描述代码编译过程
clang -rewrite-objc main.m #import <Foundation/Foundation.h> #import <objc/runtime.h> // ...
- hdoj-1214-圆桌会议【逆序数】
圆桌会议 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...
- 20170623_oracle基础知识_常见问题
1 如何配置网络服务?两种连接 Oracle 工具? 1) 打开Net Manager 2) 选择服务命名,点击“+ ”号 3 ) 网络服务名: remote协议:tcp/ip 主机名:ip地址 端 ...
- centos上装eclipse步骤
1.去官网下个eclipse for linux的 地址:http://www.eclipse.org/downloads/ Eclipse IDE for Java EE Developer ...
- leetcode笔记:Jump Game
一. 题目描写叙述 Given an array of non-negative integers, you are initially positioned at the first index o ...
- Codesys——PLCopen基本运动控制功能块的使用方法总结
MC_Halt 在MC_MoveVelocity模式下,用MC_Halt停止其轴,当前轴的状态由 ContinuousMotion(当前转速)--->DiscreteMotion(速度不为0)- ...