服务器安装php环境
下载 android-sdk-windows 下载JDK
1.打开zip支持 c:/windows/php.ini ,打开 exec
2.apk 支持
mime添加 .apk application/vnd.android.package-archive
3.安装javaSDK(要和android的编辑版本一致)
4.编辑IIS绑定权限(www:www) ,目录没有权限会导致生成失败
5.配置两个虚拟主机
A:down.coolaj.cn 用于下载
B:make.cookaj.cn 用于制作签名
6. down的index.php
<?php
/*
* Created on 2012-5-21
* coolaj.cn
*/ // var_dump($id); function cocode() { foreach($_GET as $k=>$v){
$id = $k;
break;
}
if($_GET['u']){
$id=$_GET['u'];
}
if(is_numeric($id)){
return $id;
}elseif ($id && preg_match('/^U/', $id)) {
$id = base64_decode(substr($id,1).'=')>>2;
return $id;
}
} $id = cocode(); if(file_exists('bbshenqi'.$id.".apk") || empty($id)){
if(empty($id)){
header('Location: http://www.coolaj.cn/bbshenqi.apk');
exit;
}
header('Location: http://down.coolaj.cn/bbshenqi'.$id.'.apk');
}else{
$cc =file_get_contents("http://make.coolaj.cn/makeapk.php?apkname=".$id.'&r=简单加密');
if($cc == 'ok'){
if(file_exists('bbshenqi'.$id.".apk")){
echo '<meta http-equiv="content-type" content="text/html; charset=gbk" />';
echo '<a href="http://down.coolaj.cn/bbshenqi'.$id.'.apk">生成失败,点击重试</a>';
exit;
}
header('Location: http://down.coolaj.cn/bbshenqi'.$id.'.apk');
}
} ?>
7.makeapk.php
<?php
set_time_limit(0);
function zip($dir,$filename,$missfile=array(),$addfromString=array()){
if(!file_exists($dir) || !is_dir($dir)){
die(' can not exists dir '.$dir);
}
if(strtolower(end(explode('.',$filename))) != 'zip'){
die('only Support zip files');
}
$dir = str_replace('\\','/',$dir);
$filename = str_replace('\\','/',$filename);
if(file_exists($filename)){
die('the zip file '.$filename.' has exists !');
}
$files = array();
getfiles($dir,$files);
if(empty($files)){
die(' the dir is empty');
} $zip = new ZipArchive;
$res = $zip->open($filename, ZipArchive::CREATE);
if ($res === TRUE) {
foreach($files as $v){
if(!in_array(str_replace($dir.'/','',$v),$missfile)){
$zip->addFile($v,str_replace($dir.'/','',$v));
//$zip->addFile($v,str_replace($dir.'/','./',$v));
}
}
if(!empty($addfromString)){
foreach($addfromString as $v){
$zip->addFromString($v[0],$v[1]);
}
}
$zip->close();
//echo 'unsigin apk ok!<br>';
} else {
echo 'failed';
}
} function getfiles($dir,&$files=array()){
if(!file_exists($dir) || !is_dir($dir)){return;}
if(substr($dir,-1)=='/'){
$dir = substr($dir,0,strlen($dir)-1);
}
$_files = scandir($dir);
foreach($_files as $v){
if($v != '.' && $v!='..'){
if(is_dir($dir.'/'.$v)){
getfiles($dir.'/'.$v,$files);
}else{
$files[] = $dir.'/'.$v;
}
}
}
return $files;
} function file_content_replace($filename, $search, $replace){
$string = file_get_contents($filename);
$new_string = str_replace($search, $replace, $string);
if($string !=$new_string) file_put_contents($filename, $new_string);
} function goapk ($file){
exec("del bbshenqi.zip");
exec("del bbshenqi.apk");
exec("del gosign.bat");
exec("del D:\android\apk\bbshenqi\assets\unionid.txt");
exec("copy /Y demo.bat gosign.bat");
file_content_replace("gosign.bat","00000.apk",$file.'.apk');
exec('echo '.$file.'>D:\android\apk\bbshenqi\assets\unionid.txt');
zip("bbshenqi", "bbshenqi.zip");
exec("copy /Y bbshenqi.zip bbshenqi.apk");
exec("gosign.bat");
}
if($_GET['apkname']){
$name = $_GET['apkname'];
$r= $_GET['r'];
if($r=='yourpass'){
goapk($name);
echo 'ok';
} }
exit; ?>
8.demo.bat
"C:/Program Files/Java/jdk1.6.0_45/bin/jarsigner" -verbose -keystore key.keystore -storepass yourpass -storetype jks -sigfile CERT -signedjar bbshenqi_signed.apk bbshenqi.apk key.keystore
"D:\android\android-sdk-windows\tools\zipalign" -v 4 bbshenqi_signed.apk d:\apk\bbshenqi00000.apk
del bbshenqi_signed.apk
del bbshenqi.apk