Android 将HttpResponse转换为.apk文件
问题是: 我与某个url建立了internet连接,并通过app_example.apk接收了一个HttpResponse 然后我想创建一个文件(an.apk) 在SD卡中输入此数据,以便下载此应用程序 可以稍后安装 如何将HttpResponse转换为.apk文件 让我们澄清一些细节:Android 将HttpResponse转换为.apk文件,android,Android,问题是: 我与某个url建立了internet连接,并通过app_example.apk接收了一个HttpResponse 然后我想创建一个文件(an.apk) 在SD卡中输入此数据,以便下载此应用程序 可以稍后安装 如何将HttpResponse转换为.apk文件 让我们澄清一些细节: 我必须通过internet连接到我的服务器来获取此apk文件 我不想安装SD卡上收到的此应用程序 所有这些都必须在我的代码中完成,我不能使用android market 我现在正在写那个文件 我正在做的是将
- 我必须通过internet连接到我的服务器来获取此apk文件
- 我不想安装SD卡上收到的此应用程序
- 所有这些都必须在我的代码中完成,我不能使用android market
// byte[] appByteArray - already has the internet response converted in bytes
try {
file = new File(Environment.getExternalStorageDirectory()+"/"+appName+".apk");
file.createNewFile();
FileOutputStream stream = null;
stream = new FileOutputStream(file, false);
ObjectOutputStream objectOut =
new ObjectOutputStream(new BufferedOutputStream(stream));
objectOut.writeObject(appByteArray);
objectOut.close();
} catch (Exception e) {
e.printStackTrace();
}
最后,文件被创建
并有接收到的内容
当我尝试安装它时,
通过视图意图(使用默认安装程序)
我收到一个解析错误,说它找不到AndroidManifest.xml
我认为在这个过程中,接收到的数据正在被破坏
你有别的办法解决这个问题吗
非常感谢这可能不是核心问题,但我认为您不想将
流
包装在ObjectOutputStream
中,因为这用于对象序列化。可能是它正在向文件中添加额外数据,以便可以使用ObjectInputStream
对其进行反序列化
我会尝试从模拟器(或设备)上取下apk,检查它的MD5与服务器上的文件,以确保正确写入位
try {
String filePath = Environment.getExternalStorageDirectory()
+ "/myappdir/" + appName + ".apk";
File file = new File(filePath);
file.getParentFile().mkdirs();
file.createNewFile();
BufferedOutputStream objectOut = new BufferedOutputStream(
new FileOutputStream(file));
objectOut.write(appByteArray);
objectOut.close();
} catch (Exception e) {
e.printStackTrace();
}
看看Pavel p的答案 另外,我要指出的是,您使用
视图意图操作安装APK的想法确实有效,因为我在过去已经测试过这项技术
但是,除非用户已明确进入设置→ 应用程序和选择的“允许非市场应用程序”,您的安装将失败,用户只会看到一个屏幕,告诉他们由于安全原因,安装已被阻止
基本上,你真的需要依靠那些相当精通技术的用户,他们愿意忽略一个可怕的安全警告,并去禁用该设置。的确如此。只需将appByteArray
写入stream
——您的FileOutputStream
。这段代码就可以工作了!正如Erich Douglass所说,ObjectOutputStream可能会向创建的文件添加额外的数据,这可能就是问题所在。非常感谢你。葡萄牙语:Obrigado!这就像一个魅力,我遇到的一个简单问题是,来自entitiy的内容长度是582504,但当我查看文件管理器时,大小会达到863145。我认为在将文件写入SD卡时添加了一些数据。有什么解决方法吗?apk文件只是一个具有不同扩展名的zip文件,因此您可以将该文件从SD卡中取出并尝试解压,看看其中是否包含您期望的所有内容。您能否发布从调用视图意图的角度获得的实际日志输出?