diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index 54e8e2668..6ce2727b0 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -17,6 +17,7 @@ import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.api.LiveConfig; +import com.fongmi.android.tv.api.SoLoader; import com.fongmi.android.tv.api.WallConfig; import com.fongmi.android.tv.bean.Func; import com.fongmi.android.tv.bean.History; @@ -72,6 +73,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen ApiConfig.get().init().load(getCallback()); mBinding.progressLayout.showProgress(); Updater.create(this).start(); + SoLoader.get().load(); Server.get().start(); setRecyclerView(); setViewModel(); diff --git a/app/src/main/java/com/fongmi/android/tv/api/SoLoader.java b/app/src/main/java/com/fongmi/android/tv/api/SoLoader.java new file mode 100644 index 000000000..c61a07be5 --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/api/SoLoader.java @@ -0,0 +1,56 @@ +package com.fongmi.android.tv.api; + +import com.fongmi.android.tv.App; +import com.fongmi.android.tv.net.OKHttp; +import com.fongmi.android.tv.utils.FileUtil; + +import java.io.File; +import java.io.IOException; + +public class SoLoader { + + private static final int exoVer = 1; + private static final int ijkVer = 1; + + private static final String url = "https://ghproxy.com/https://raw.githubusercontent.com/FongMi/TV/release/other/"; + private static final String exo = "libexo-" + exoVer + ".so"; + private static final String ijk = "libijk-" + ijkVer + ".so"; + + private static class Loader { + static volatile SoLoader INSTANCE = new SoLoader(); + } + + public static SoLoader get() { + return Loader.INSTANCE; + } + + public void load() { + App.execute(() -> { + checkSo(exo); + checkSo(ijk); + }); + } + + private void checkSo(String name) { + try { + File file = new File(FileUtil.getLibDir(), name); + if (!file.exists()) download(file, name); + System.load(file.getAbsolutePath()); + } catch (Exception ignored) { + } + } + + private void download(File file, String name) throws IOException { + remove(name.split("-")[0]); + FileUtil.write(file, OKHttp.newCall(url + name).execute().body().bytes()); + } + + private void remove(String name) { + File directory = FileUtil.getLibDir(); + for (File file : directory.listFiles()) { + if (file.getName().contains(name)) { + file.delete(); + } + } + } +} diff --git a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java index e31a7aa77..0c08058ff 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java @@ -1,5 +1,6 @@ package com.fongmi.android.tv.utils; +import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; @@ -30,6 +31,10 @@ public class FileUtil { return Environment.getExternalStorageDirectory().getAbsolutePath(); } + public static File getLibDir() { + return App.get().getDir("libs", Context.MODE_PRIVATE); + } + public static File getCacheDir() { return App.get().getCacheDir(); }