ホームページ >バックエンド開発 >PHPチュートリアル >exec関数実行例外 - アプリケーション:PHPがapkのアイコン画像を抽出

exec関数実行例外 - アプリケーション:PHPがapkのアイコン画像を抽出

WBOY
WBOYオリジナル
2016-06-13 13:18:371041ブラウズ

exec 関数実行エラー - アプリケーション: PHP が apk のアイコン画像を抽出します

作者: Lin Zimu wolinxuebin

転載用に保管してください: http://blog.csdn.net/wolinxuebin


私は今日、apk から画像アイコン情報を読み取るプロジェクトに取り組んでいます。読み込むデータ量が多いことと、現在のテスト処理がWindows環境であるため、処理後のデータをサーバーにアップロードするのに時間がかかります。

主に次の 2 つのことを行います: 1. apk のアイコン パスとその他の情報を読み取ります。 2. パスの下にある画像を解凍します。

コードに直接移動します:

<?php
/**********************************
 * 作者:林子木
 * 功能:提取apk中的icon
 * 系统:windows
 */
	define("AAPTTOOL","c:/apktool/aapt");//aapt工具的路径
	define("UNZIP","E:/GnuWin32/bin/unzip.exe");//试了试winrar等,没成功,就用了unzip,而linux有自带这个的
		
    function getApkIcon($apk_file,$save_path){
    	
    	$aapt = AAPTTOOL;	//aapt工具的路径
    	exec("{$aapt} d badging {$apk_file}",$out,$return);//从apk中解除信息
    	//print_r('$out');		//可以查看输出信息
		if($return == 0){
			$str_out = implode("\n", $out);//分离信息
		}
    
		$pattern_icon = "/icon='(.+)'/isU";	//提取icon信息
		preg_match($pattern_icon, $str_out,$m);
		$info['icon']= $m[1];
		
		if($info['icon']){
			$command = UNZIP." -o -j {$apk_file} {$info['icon']} -d $save_path";
			exec($command);//解压
    	}
    }
 
    getApkIcon("c:/test.apk","c:/tmp/");

?>

使用するツールは次のとおりです。 1. apktool オンラインには多数あり、インストール チュートリアルもあります。唯一の問題は、Java 環境で実行する必要があることです。

2. 解凍: http://download.csdn.net/detail/wolinxuebin/4464939 winrar をテストしましたが、おそらく私のスキルが限られているため、APK を解凍できません


ここで非常に重要な点についてお話します。実行操作エラー

今日、私のソフトウェアは元々 E:/Program Files/GnuWin32/ にインストールされていたため、定義したときは
でした。

define("UNZIP","E:/Program Files/GnuWin32/bin/unzip.exe");
しかし、実行しても結果はありません。この exec はエラーを報告しません

exec("{$aapt} d badging {$apk_file}",$out,$return);
$return が常に 1 であることを確認します。これは、操作が成功しなかったことを意味します。

そして、このコマンドはコマンドラインから完全に実行できます。

最後に、exec() の commod パラメータのディレクトリ にはスペース を含めることはできないことがわかりました。つまり、Program Files を ProgramFiles に変更する必要があるため、変更しました。インストールディレクトリ。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。