有个问题,一个安卓应用里,有一个本身的包目录和一个存档目录,一般热更数据都是在存档目录下,包目录不知道是不是可以动它,因为.so文件一开始就是在包目录下的,我是想更新下来后,直接复制到包目录里替换到原来的.so文件,这样可以行吗?但是复制过程中如何该文件正在启动就无法复制,我也不太懂系统启动中程序是否会锁定该文件。因为有些逻辑和加密数据是在C++中弄的,每次更新版本很想连.so一起更新了,虽然叫热更但还是需要关闭应用再启动,但总比去下载安装apk好.
下边这个是拷贝覆盖文件代码,不知道对不对
public static void copyFile(File sourceFile, File targetFile)throws IOException {
if(!targetFile.exists()){
targetFile.getParentFile().mkdirs();
targetFile.createNewFile();
}
FileChannel fc1 = null;
FileChannel fc2 = null;
try
{
fc1 = new FileInputStream(sourceFile).getChannel();
fc2 = new FileOutputStream(targetFile).getChannel();
fc2.transferFrom(fc1, 0L, fc1.size());
}
finally
{
if(fc1!=null)
{
fc1.close();
}
if(fc2!=null)
{
fc2.close();
}
}
}
这个是没可能的吧,包内应该都是不允许写入的
你把so下载到科协目录,动态加载指定目录的so,试试看
这种只能增量更新
像普通数据一样下载到可写入目录,然后重启加载新的动态库?不知道有没有权限要求,没弄过,随便说说
可以的,微信的so热更框架,用过
我试过了,第二次更新的时候,因为正在运行的.so,这个时候覆盖过去会闪退,文件都被破坏了,然后一直闪退无法启动
不要想的,无法热更的!!!
第二次更新的时候不能改个别的名字?
为什么不是每次启动客户端时 更新SO呢,然后更新到本地后 再去加载SO,这样不就不存在正在运行的情况了吗,那么也就等于总是最新的SO了是
很好猜,更新的代码写在so的逻辑里了
我的更新代码都是在2dx引擎里的,如果在启动Cocos2dxActivity之前更新的话,得单独写另一个Active更新程序,而且安卓开发我不熟悉。特别是那个as编辑界面看着头疼,没时间搞。现在.so文件好像也能覆盖过去,延迟几秒,但不是很稳定
正在改,每次都会变
so库可以写在sd卡里面,能读取到就可以实现热更;