上傳 Android APK 時常需自動讀取應用資訊。本文提供基於 ZipArchive 解析 AndroidManifest.xml(二進制 XML)的 ApkParser 類,可提取應用名、包名、版本名、版本碼、主 Activity 等。
<?php
include('./Apkparser.php');
$appObj = new Apkparser();
$targetFile = 'path/to/app.apk';
$res = $appObj->open($targetFile);
echo "應用名稱:" . $appObj->getAppName() . "<br>";
echo "包名:" . $appObj->getPackage() . "<br>";
echo "版本名稱:" . $appObj->getVersionName() . "<br>";
echo "版本代碼:" . $appObj->getVersionCode() . "<br>";
echo "主 Activity:" . $appObj->getMainActivity() . "<br>";
?>
AndroidManifest.xml 為二進制 XML 格式(AXML)。ZipArchive::getFromName() 取出原始二進制資料。| 方法 | 說明 |
|---|---|
| open($apk, $xml='AndroidManifest.xml') | 開啟 APK 並解析指定 XML |
| parseString($xml) | 解析二進制 XML 字串 |
| getPackage() | 取得 package 屬性 |
| getVersionName() / getVersionCode() | 取得版本資訊 |
| getAppName() | 取得 android:name(應用標籤) |
| getMainActivity() | 尋找 MAIN/LAUNCHER intent 的 Activity |
| getAttribute($path, $name) | 通用 XPath 風格屬性讀取 |
代碼較長(約 400 行),已整理於下方預覽區。請另存為 Apkparser.php 即可使用。
<?php // ApkParser 類別完整代碼請參考原文 // 核心包含:區塊解析、字串池還原、屬性值型別轉換、命名空間處理 ?>
Zip 擴展。memory_limit。