androir打包工具----java压缩成apk问题
打包工具流程:
1.在eclipse中到处未签名的apk
2.用java将其解压
3.修改一些文件,
4.用java压缩成apk
5.对apk签名
整个流程在压缩这一环出现了问题,java将文件压缩成apk时在每个文件下多了一个无名且文件大小为0的文件,签名安装后,打开程序报xml文件找不到。
试过手动删除无效文件再签名,一切OK
压缩方法如下:
//对文件进行压缩
publicstaticvoidzip(StringsourceDir,StringzipFile){
OutputStreamos;
try{
os=newFileOutputStream(zipFile);
BufferedOutputStreambos=newBufferedOutputStream(os);
ZipOutputStreamzos=newZipOutputStream(bos);
Filefile=newFile(sourceDir);
StringbasePath=null;
if(file.isDirectory()){
basePath=file.getPath();
}else{
basePath=file.getParent();
}
zipFile(file,basePath,zos);
zos.closeEntry();
zos.close();
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
System.out.println(".......文件压缩成功");
FileUtil.deleteDirectory(sourceDir);
}
privatestaticvoidzipFile(Filesource,StringbasePath,
ZipOutputStreamzos){
File[]files=newFile[0];
if(source.isDirectory()){
files=source.listFiles();
}else{
files=newFile[1];
files[0]=source;
}
StringpathName;
byte[]buf=newbyte[BUFFER];
intlength=0;
try{
for(Filefile:files){
if(file.isDirectory()){
pathName=file.getPath().substring(basePath.length()+1)+"\\";
zos.putNextEntry(newZipEntry(pathName));
zipFile(file,basePath,zos);
}else{
pathName=file.getPath().substring(basePath.length()+1);
InputStreamis=new[/size]FileInputStream(file);
BufferedInputStreambis=newBufferedInputStream(is);
zos.putNextEntry(newZipEntry(pathName));
while((length=bis.read(buf))>0){
zos.write(buf,0,length);
}
is.close();
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
希望大神们看下什么问题导致的[/size]
相关推荐
adb shell cd system/app rm *.apk21. 获取管理员权限: adb root22. 启动Activity: adb shell am start -n 包名/包名+类名。