0
点赞
收藏
分享

微信扫一扫

flutter热更新安卓端详细教程-附源码-超简单,android热更新技术

是她丫 2022-02-02 阅读 87

import android.os.Environment;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterShellArgs;

public class MyFlutterActivity extends FlutterActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//申请权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(MyFlutterActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MyFlutterActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
if (ContextCompat.checkSelfPermission(MyFlutterActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MyFlutterActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
}
}

@Override
public FlutterShellArgs getFlutterShellArgs() {
copyLibAndWrite(this, “hotlibapp.so”);
FlutterShellArgs supFA = super.getFlutterShellArgs();
File dir = this.getDir(“libs”, Activity.MODE_PRIVATE);
String libPath = dir.getAbsolutePath() + File.separator + “hotlibapp.so”;
File libFile = new File(libPath);
if (libFile.exists()) {
supFA.add("–aot-shared-library-name=" + libPath); //如果有hotlibapp文件 ,配置进去,没有则作用默认的
}
return supFA;
}

// 作用: 在手机根目录找 hotlibapp.so 文件 , 如果有则复制到 app libs 文件下, 没有则不做操作
public static void copyLibAndWrite(Context context, String fileName) {
try {
String path = Environment.getExternalStorageDirectory().toString();
File destFile2 = new File(path + “/” + fileName);
if (destFile2.exists()) {
File dir = context.getDir(“libs”, Activity.MODE_PRIVATE);
File destFile = new File(dir.getAbsolutePath() + File.separator + fileName);
if (destFile.exists()) {
destFile.delete();
}
destFile.createNewFile();
FileInputStream is = new FileInputStream(destFile2);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] buffer = new byte[is.available()];
int byteCount;
while ((byteCount = is.read(buffer)) != -1) {
fos.write(buffer, 0, byteCount);
}
fos.flush();
is.close();
fos.close();
destFile2.delete(); //复制完后删除这个文件
}
} catch (IOException e) {
}

}
}

原模原样复制进去就行 , 建议用as 打开 , 避免导包出错,代码不用变

  1. 打开MainActivity类 , 继承自己写的MyFlutterActivity类

package com.example.HotFlutter;
public class MainActivity extends MyFlutterActivity {
}

  1. 在AndroidManifest中添加

写在最后

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从哪里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家

我的【Github】会分享一些关于Android进阶方面的知识,也会分享一下最新的面试题~

如果你熟练掌握GitHub中列出的知识点,相信将会大大增加你通过前两轮技术面试的几率!这些内容都供大家参考,互相学习。

的朋友可以点个赞

举报

相关推荐

0 条评论