ThinkPHP5.1 + tufanbarisyildirim 解析apk


摘要

對於apk,我可以說只會安裝,並不知道其中有什么內容需要記錄下來。這次公司做一個關於電視機頂盒的項目。對於這個陌生的項目,剛開始真是一臉懵逼,完全不知道如何下手。

因為這類的項目完全沒有接觸過,而且網上搜一下也看不到這類的開發流程和需求。還好公司有個老司機帶帶我。廢話不多說,搞起來。

 

TP5獲取上傳文件並驗證

tp5獲取上傳文件可以說是相當的簡單,(注意此處的$file的類型是tp5封裝的File)

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

這樣就可以直接的獲取上傳的文件,簡單的蛋疼。

首先驗證文件是否上傳了並且是否為空。

if (false === ($file instanceof File)) {
  //文件為空,拋異常/業務處理
}

然后就是驗證文件的類型了,apk的媒體信息其實就是zip,千萬不要使用后綴名進行判斷啊。年輕的我就是用后綴進行判斷的。

老司機看到就建議我使用getMime方法獲取文件的媒體進行進行匹配。(getMime屬於tp5 File的封裝方法)

if ('application/zip' !== $file->getMime()) {
  //文件類型錯誤,拋異常/業務處理
}

 

tufanbarisyildirim

加入composer

"require": {
        "tufanbarisyildirim/php-apk-parser":"dev-master"
    }

然后到項目路徑安裝一下,沒安裝composer就安裝composer或者直接從網上拉咯。

composer install

 

Parser解析apk

Parser位於 ApkParser目錄下,實例化時只需要傳入apk的全路徑名

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

 

以下為獲取apk中的參數

$apkParser->getManifest()->getPackageName(); //獲取apk包名
$apkParser->getManifest()->getVersionCode(); //獲取apk版本號
$apkParser->getManifest()->getVersionName(); //獲取apk版本名稱

$apkParser->getManifest()->getMinSdk(); // 支持最低sdk的平台
$apkParser->getManifest()->getMinSdkLevel(); // 支持最低sdk的版本
$apkParser->getManifest()->getTargetSdk(); // 目標Sdk的平台
$apkParser->getManifest()->getTargetSdkLevel(); //目標sdk的版本

$labelIndex = $apkParser->getManifest()->getApplication()->getLabel(); //獲取應用名稱的索引
$apkParser->getResources($labelIndex); //獲取應用名稱的數組

$iconIndex = $apkParser->getManifest()->getApplication()->getIcon();//獲取圖標的索引
$icons = $apkParser->getResources($iconIndex); //獲取圖標路徑的數組
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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM