摘要

对于apk,我可以说只会安装,并不知道其中有什么内容需要记录下来。这次公司做一个关于电视机顶盒的项目。对于这个陌生的项目,刚开始真是一脸懵逼,完全不知道如何下手。

因为这类的项目完全没有接触过,而且网上搜一下也看不到这类的开发流程和需求。还好公司有个老司机带带我。废话不多说,搞起来。

TP5获取上传文件并验证

tp5获取上传文件可以说是相当的简单,(注意此处的$file的类型是tp5封装的File)

  1. $file = $this->request->file('file');

这样就可以直接的获取上传的文件,简单的蛋疼。

首先验证文件是否上传了并且是否为空。

  1. if (false === ($file instanceof File)) {
  2.   //文件为空,抛异常/业务处理
  3. }

然后就是验证文件的类型了,apk的媒体信息其实就是zip,千万不要使用后缀名进行判断啊。年轻的我就是用后缀进行判断的。

老司机看到就建议我使用getMime方法获取文件的媒体进行进行匹配。(getMime属于tp5 File的封装方法)

  1. if ('application/zip' !== $file->getMime()) {
  2.   //文件类型错误,抛异常/业务处理
  3. }

tufanbarisyildirim

加入composer

  1. "require": {
  2. "tufanbarisyildirim/php-apk-parser":"dev-master"
  3. }

然后到项目路径安装一下,没安装composer就安装composer或者直接从网上拉咯。

  1. composer install

Parser解析apk

Parser位于 ApkParser目录下,实例化时只需要传入apk的全路径名

  1. $apkParser = new \ApkParser\Parser($file->getPathname());

以下为获取apk中的参数

  1. $apkParser->getManifest()->getPackageName(); //获取apk包名
  2. $apkParser->getManifest()->getVersionCode(); //获取apk版本号
  3. $apkParser->getManifest()->getVersionName(); //获取apk版本名称
  4.  
  5. $apkParser->getManifest()->getMinSdk(); // 支持最低sdk的平台
  6. $apkParser->getManifest()->getMinSdkLevel(); // 支持最低sdk的版本
  7. $apkParser->getManifest()->getTargetSdk(); // 目标Sdk的平台
  8. $apkParser->getManifest()->getTargetSdkLevel(); //目标sdk的版本
  9.  
  10. $labelIndex = $apkParser->getManifest()->getApplication()->getLabel(); //获取应用名称的索引
  11. $apkParser->getResources($labelIndex); //获取应用名称的数组
  12.  
  13. $iconIndex = $apkParser->getManifest()->getApplication()->getIcon();//获取图标的索引
  14. $icons = $apkParser->getResources($iconIndex); //获取图标路径的数组
  15. file_put_contents('保存icon图标的全路径名', stream_get_contents($apkParser->getStream($icons[0]))); //把第1个图标转为流后保存到相应的目录

个人使用这个控件时遇到点问题,就是应用名称数组,我怎么才能知道应用名称对应的语言呢?因为应用名称中可能有简体中文、繁体中文、英文等。我怎么才能取出简体中文的应用名称呢?

emmmm,如果各位使用过的大佬知道的话,可否在评论区写下。非常感谢。

最后,感谢各位小伙伴赏脸看我的博客。如果对文章还有什么可以改进的地方,请务必在评论区写下,或至邮件到821312534@qq.com,非常感谢。

> 个人博客网址: https://colablog.cn/

如果我的文章帮助到您,可以关注我的微信公众号,第一时间分享文章给您

![微信公众号](http://qiniuyun.colablog.cn/%E4%BA%8C%E7%BB%B4%E7%A0%81.jpg)

ThinkPHP5.1 + tufanbarisyildirim 解析apk的更多相关文章

  1. Java环境解析apk文件信息

    概述:Java解析apk文件,获取apk文件里的包名,版本号,图标文件等; 功能:可以提供给windows和linux平台使用; 原理:利用aapt.exe或者aapt这些anroid平台解析apk文 ...

  2. c# 借助cmd命令解析apk文件信息

    借助aapt.exe文件 aapt.exe 解析apk包信息cmd命令: aapt dump badging *.apkaapt d badging *.apk >1.txt(保存成1.txt文 ...

  3. 基于 jq 实现拖拽上传 APK 文件,js解析 APK 信息

    技术栈 jquery 文件上传:jquery.fileupload,github 文档 apk 文件解析:app-info-parser,github 文档 参考:前端解析ipa.apk安装包信息 - ...

  4. android 利用 aapt 解析 apk 得到应用名称 包名 版本号 权限等信息

    在上传各大市场时发现 apk 上传后能自动解析出应用名称.包名.版本号.使用权限等信息,所以就研究了一下 1 直接解压 apk 解析  AndroidManifest.xml 是不行的,因为 apk ...

  5. python3 解析apk图标

    有两处值小点,一是如何解压缩,另一个是如何写文件,第二点上我找的是phthon2的代码,一直写文件的时候报不是字符串的问题,将打开方式加上"b“的模式搞定 print文件出来直接删除了,原因 ...

  6. 使用aapt解析apk,得到package内容

    $cmd = C('APPT_PREFIX'); exec(C('APPT_PREFIX') . UPLOAD_RES_PATH . $up_az, $out, $return); && ...

  7. thinkphp5源码解析(1)数据库

    前言 tp5的数据库操作全部通过Db类完成,比较符合国人的习惯,比如简单的Db::query().Db::execute(),还有复杂的链式操作Db::where('id=1')->select ...

  8. thinkphp5源码解析(2)控制器

    入口文件index.php: // 定义应用目录 define('APP_PATH', __DIR__ . '/../application/'); // 加载框架引导文件 require __DIR ...

  9. Java解析apk、ipa图标,包名,应用名称,版本号

    参看:http://blog.csdn.net/moyanxuan_1993_2_24/article/details/53612001

随机推荐

  1. Fastjson 专题

    JSONObject.toJSONString(Object object, SerializerFeature... features) SerializerFeature有用的一些枚举值 Quot ...

  2. CSS简写总结

    CSS简写就是指将多行的CSS属性简写成一行,又称为CSS代码优化或CSS缩写.CSS 简写的最大好处就是能够显著减少CSS文件的大小,优化网站整体性能,更加容易阅读. 下面介绍常见的CSS简写规则: ...

  3. MVC项目中怎么浏览html页面

    public class HomeController : Controller { public ActionResult Index() { //return View(); //return R ...

  4. top_channel_args.go

    , fmt.Sprintf("%s: closing %s", proto, listener.Addr())) }

  5. 阅读nsq源码 ---初步架构设计图

     

  6. Oracle系列-锁表与解锁解决方案(大招版)-解决问题才是王道

    [Oracle系列-锁表与解锁解决方案(大招版)] --1查看被锁的表 select b.owner,b.object_name,a.session_id,a.locked_mode from v$l ...

  7. JVM学习记录-类加载的过程

    类的整个生命周期的7个阶段是:加载(Loading).验证(Verification).准备(Preparation).解析(Resolution).初始化(Initialization).使用(Us ...

  8. Go语言中的面向对象

    前言 如果说最纯粹的面向对象语言,我觉得是Java无疑.而且Java语言的面向对象也是很直观,很容易理解的.class是基础,其他都是要写在class里的. 最近学习了Go语言,有了一些对比和思考.虽 ...

  9. PdfReader按页将PDF切割成多个PDF

    private MemoryStream GetNewPdfByPageNum(PdfReader pdfReader, int pageNum) { MemoryStream memoryStrea ...

  10. 一起来学spring Cloud | 第一章:spring Cloud 与Spring Boot

    目前大家都在说微服务,其实微服务不是一个名字,是一个架构的概念,大家现在使用的基于RPC框架(dubbo.thrift等)架构其实也能算作一种微服务架构. 目前越来越多的公司开始使用微服务架构,所以在 ...