天天看点

linux系统上php执行apk签名的方法

linux系统上php执行apk签名的方法

当时为应法国客户的需求做的签名服务器,服务器当时我是用php和thinkphp 框架做的。这块我就不多讲了,不懂得同学可以自行百度学习。我主要讲我在实现签名服务器的算法和思路。

废话不多说,直接上代码:

private function signature( $filepath,$apkname,$keystore,$aliasName,$suess,$keystorepass){ if(file_exists($filepath.$apkname) && file_exists($filepath.$keystore)){//判断文件是否存在 //$decod =json_decode($json); // echo $json; // $file = fopen($_SERVER['DOCUMENT_ROOT']."/data.php",'w+'); //fwrite($file, $json); //fclose($file) mkdir($filepath."test/");//创建路径 chmod($filepath."test/",0777);//给文件夹赋权限 $sudounzip = system("unzip ".$filepath.$apkname." -d ".$filepath."test"); //系统执行liunx命令解压Apk到test文件夹下 $test=$filepath."test";// //删除test文件夹下的旧的签名文件 $removeMeta = system("rm -rf ".$test."/META-INF"); //退出文件夹将删除后的apk文件打包 $zipapk = system("cd ".$filepath."test/ && zip -q -r sigalg_".$apkname." ./*"); //修改打包后的apk文件名 $removeapp=system("cd ".$filepath."test/ && mv sigalg_".$apkname." ".$filepath."sigalg_".$apkname); //删除旧的无用文件 $remvtest=system("rm -rf ".$test); $rmsigalg = system("rm -rf ".$filepath.$apkname); //进行系统签名 $result = system("jarsigner -verbose -keystore ".$filepath.$keystore." -storepass ".$keystorepass." -signedjar ".$filepath."signed_".$apkname." -digestalg SHA1 -sigalg MD5withRSA ".$filepath."sigalg_".$apkname." ".$aliasName); //删除签名前的文件 $rmsigalg = system("rm -rf ".$filepath."sigalg_".$apkname."&& echo 1"); //更改签名后的文件名 $rename=system("cd ".$filepath." && mv signed_".$apkname." ".$filepath.$apkname."&& echo 1"); if($rename){ echo "<h1>SignatureAPK succeed!</h1>"; $suess = "y"; }else{ echo "<h1>SignatureAPK fail!</h1>"; $suess = "no"; } //echo $rmsigalg."<br>"; }else{ echo "<h1> apk ro keystore can not exist !</h1>"; } //echo $suess."llllllll"; //保存各个变量名到session里 $_SESSION["keyname"]= array($keystorepass,$aliasName,$suess); }

其中的变量$filepath 文件路径、$apkname 要签名的apk、 $keystore签名文件keystore、$aliasName别名、$suess成功标识、$keystorepass签名文件keystore对应的签名密钥