公司项目关系,要求在通过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应用的包名,版本号等信息的更多相关文章

  1. (原)android系统下绑定Server的时候报MainActivity has leaked ServiceConnection的错误

    今天在android系统下根据官方的demo代码,我们需要启动一个服务,并绑定,但在程序启动以后,老是报错:   Activity MainActivity has leaked ServiceCon ...

  2. iTOP-iMX6开发板Android系统下LVDS和HDMI双屏异显方法

    迅为iMX6 开发板 android 系统下 LVDS 和 HDMI 双屏异显的使用过程. 注意,iTOP-iMX6 开发板的 android 系统想要实现对 LVDS 和 HDMI 双屏异显功能的支 ...

  3. Linux 系统下用源码包安装软件

    Linux系统下用源码包安装软件 by:授客 QQ:1033553122 下载源码安装包,解压或者直接双击打开(如果有安装zip或rar等压缩/解压缩软件的话),查找相关的安装说明文件,一般是READ ...

  4. android studio无法识别含有rcs包名的jar

    http://blog.csdn.net/JingleYe/article/details/70048943     android studio无法识别含有rcs包名的jar android stu ...

  5. 【Android Studio安装部署系列】二十七、Android studio修改项目名称和包名

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 实际项目开发中可能碰到项目名称写错了或者需要修改,而且包名可能也想要修改,那么如何操作呢. 本文是在Android Studio3. ...

  6. Android 获取包名,版本信息

    Android 获取包名,版本信息及VersionName名称     <span style="font-size: 14px;">private String ge ...

  7. Android系统下的动态Dex加载

    1 问题在Android系统中,一个App的所有代码都在一个Dex文件里面.Dex是一个类似Jar的存储了多有Java编译字节码的归档文件.因为Android系统使用Dalvik虚拟机,所以需要把使用 ...

  8. Android系统下的动态Dex加载与app速度优化

    1 问题 在Android系统中,一个App的所有代码都在一个Dex文件里面.Dex是一个类似Jar的存储了多有Java编译字节码的归档文件.因为Android系统使用Dalvik虚拟机,所以需要把 ...

  9. Android系统下app测试功能点

    一.安装卸载 1.验证app能否正常的安装启动运行,安装后的文件夹及文件是否写到了指定的目录里,卸载后相关文件是否清除 2.软件安装/卸载过程中意外情况的处理是否符合需求(如死机,重启,断电) 3.安 ...

随机推荐

  1. LeetCode240:Search a 2D Matrix II

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  2. Eclipse导入外部项目问题总结

     此次在项目开发过程中导入从oksvn下载的共享项目时出现几个项目在不同的IDE导入导出时的问题,为免忘记做例如以下笔记: 1 类路径问题 在Java开发中大多数的开发人员使用的IDE是MyEcl ...

  3. click事件触发也有失灵的时候?

    今天做了个手机页面,点击某个按钮->弹出菜单,再点击菜单以外的任意位置->关闭菜单,在其他浏览器里面没有问题,但是在IOS浏览器中并不会关闭. 网上解决这个bug的帖子很多,这篇帖子主要是 ...

  4. Polymorphism (C# Programming Guide)

    https://msdn.microsoft.com/en-us/library/ms173152.aspx Polymorphism is often referred to as the thir ...

  5. P3469 [POI2008]BLO-Blockade tarjan

    好久没发博客了啊!自我反省1s...今天再捡起来. 这个题是一道有一点特殊的tarjan,用tarjan维护子树大小,然后判断是否有边多次连接,(就是非树边),然后就进行乘法计算就行了. 具体在代码里 ...

  6. JZOJ 1667 ( bzoj 1801 ) [ AHOI 2009 ] 中国象棋 —— DP

    题目:https://jzoj.net/senior/#main/show/1667 首先,一行.一列最多只有 2 个炮: 所以记录一下之前有多少行有 0/1/2 个炮,转移即可: 注意取模!小心在某 ...

  7. leetcode快排相关

    leetcode:75颜色分类(3way).215数组中的第K个最大元素(normal) 3way private static void quick3waySort(int[] arr, int l ...

  8. 02、监听key是否正确

    SDKInitializer其实是有两个action,第三个SDK_BROADTCAST_INTENT_EXTRA_INFO_KEY_ERROR_CODE虽然是一个常量但是它不是action.第二个a ...

  9. Java I/O 的工作机制浅析

    I/O 问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这个海量数据时代,数据在网络中随处流动.这个流动的过程中都涉及到 I/O 问题,可以说大部分 Web 应用系统的瓶颈都是 ...

  10. MVVMLight消息通知实现机制详解(二)

    接上文 MVVMLight消息通知实现机制详解(一) 该工具的内部主要逻辑是以字典模式进行储存持有订阅对象设置的传入参数Type类型.Key值.Action.Target(订阅对象本身) 在发生订阅事 ...