上传jar手机游戏客户端时,因为有些手机如三星的某些机型只能安装jad文件,所以在后台上传需弄一个根据JAR文件自动生成JAD的功能。一般在JAR的文件包内,会有一个游戏信息文件,一般会在META-INF/MANIFEST.MF里,我们只需要读取到这个文件的内容,然后增加一些其它信息,生成JAD文件里就行了。这里需要用到PHP的zip扩展来读取JAR文件内容。

一、安装php zip扩展
wget http://pecl.php.net/get/zip-1.10.2.tgz
tar zxvf zip-1.10.2.tgz
cd zip-1.10.2
/opt/php528fpm/bin/phpize
./configure --with-php-config=/opt/php528fpm/bin/php-config
make
make install

cp /opt/php528fpm/lib/php/extensions/no-debug-non-zts-20060613/zip.so /opt/php528fpm/ext/
vi /opt/php528fpm/lib/php.ini
extension=zip.so //增加zip.so扩展
/opt/php528fpm/sbin/php-fpm restart //重启PHP

二、读取JAR里的文件内容生成JAD

$jar_file = "test.jar";
$jar_content = zip_open($jar_file);
if(!empty($jar_content)){
	$jar_size = filesize($jar_file);
	while ($zip_entry = zip_read($zip)) {
		if (zip_entry_name($zip_entry) == "META-INF/") {
			if (zip_entry_open($zip, $zip_entry, "r")) {									
				$jad_content = "MIDlet-Jar-Size: $jar_size/r
					MIDlet-Jar-URL: $jar_file/r/n";
				$jad_content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));	
				$jad_file = str_replace('jar','jad',$jar_file);
				$handle = fopen($jad_file, "w");
				fwrite($handle, $jad_content);
				zip_entry_close($zip_entry);
			}
		}
	}
}