From 44caf01caef519fd51d8066fc7344e772b763cac Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Fri, 24 Mar 2017 17:11:31 +0100 Subject: [PATCH] Cleanup code to load the native library. --- .../com/b44t/messenger/ApplicationLoader.java | 6 +- .../java/com/b44t/messenger/NativeLoader.java | 212 ------------------ 2 files changed, 3 insertions(+), 215 deletions(-) delete mode 100644 MessengerProj/src/main/java/com/b44t/messenger/NativeLoader.java diff --git a/MessengerProj/src/main/java/com/b44t/messenger/ApplicationLoader.java b/MessengerProj/src/main/java/com/b44t/messenger/ApplicationLoader.java index bfbba2580..4dc38c6c5 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/ApplicationLoader.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/ApplicationLoader.java @@ -219,15 +219,15 @@ public class ApplicationLoader extends Application { @Override public void onCreate() { + Log.i("DeltaChat", "************ Primary-init ************"); super.onCreate(); applicationContext = getApplicationContext(); - NativeLoader.initNativeLibs(ApplicationLoader.applicationContext); + System.loadLibrary("messenger.1"); new ForegroundDetector(this); - // EDIT BY MR - create a MrMailbox object; as android stops the App by just killing it, we do never call MrMailboxUnref() + // create a MrMailbox object; as android stops the App by just killing it, we do never call MrMailboxUnref() // however, we may want to to have a look at onPause() eg. of activities (eg. for flushing data, if needed) - Log.i("DeltaChat", "************ Primary-init ************"); MrMailbox.MrCallback(0, 0, 0); // do not remove this call; this makes sure, the function is not removed from build or warnings are printed! MrMailbox.init(); diff --git a/MessengerProj/src/main/java/com/b44t/messenger/NativeLoader.java b/MessengerProj/src/main/java/com/b44t/messenger/NativeLoader.java deleted file mode 100644 index db26d5456..000000000 --- a/MessengerProj/src/main/java/com/b44t/messenger/NativeLoader.java +++ /dev/null @@ -1,212 +0,0 @@ -/******************************************************************************* - * - * Messenger Android Frontend - * (C) 2013-2016 Nikolai Kudashov - * (C) 2017 Björn Petersen - * Contact: r10s@b44t.com, http://b44t.com - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see http://www.gnu.org/licenses/ . - * - ******************************************************************************/ - - -package com.b44t.messenger; - -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.os.Build; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -public class NativeLoader { - - private final static int LIB_VERSION = 1; - private final static String LIB_NAME = "messenger." + LIB_VERSION; - private final static String LIB_SO_NAME = "lib" + LIB_NAME + ".so"; - private final static String LOCALE_LIB_SO_NAME = "lib" + LIB_NAME + "loc.so"; - //private String crashPath = ""; - - private static volatile boolean nativeLoaded = false; - - private static File getNativeLibraryDir(Context context) { - File f = null; - if (context != null) { - try { - f = new File((String)ApplicationInfo.class.getField("nativeLibraryDir").get(context.getApplicationInfo())); - } catch (Throwable th) { - th.printStackTrace(); - } - } - if (f == null) { - f = new File(context.getApplicationInfo().dataDir, "lib"); - } - if (f.isDirectory()) { - return f; - } - return null; - } - - private static boolean loadFromZip(Context context, File destDir, File destLocalFile, String folder) { - try { - for (File file : destDir.listFiles()) { - file.delete(); - } - } catch (Exception e) { - FileLog.e("messenger", e); - } - - ZipFile zipFile = null; - InputStream stream = null; - try { - zipFile = new ZipFile(context.getApplicationInfo().sourceDir); - ZipEntry entry = zipFile.getEntry("lib/" + folder + "/" + LIB_SO_NAME); - if (entry == null) { - throw new Exception("Unable to find file in apk:" + "lib/" + folder + "/" + LIB_NAME); - } - stream = zipFile.getInputStream(entry); - - OutputStream out = new FileOutputStream(destLocalFile); - byte[] buf = new byte[4096]; - int len; - while ((len = stream.read(buf)) > 0) { - Thread.yield(); - out.write(buf, 0, len); - } - out.close(); - - destLocalFile.setReadable(true, false); - destLocalFile.setExecutable(true, false); - destLocalFile.setWritable(true); - - try { - System.load(destLocalFile.getAbsolutePath()); - //init(context.getCacheDir().getAbsolutePath(), BuildVars.DEBUG_VERSION); - nativeLoaded = true; - } catch (Error e) { - FileLog.e("messenger", e); - } - return true; - } catch (Exception e) { - FileLog.e("messenger", e); - } finally { - if (stream != null) { - try { - stream.close(); - } catch (Exception e) { - FileLog.e("messenger", e); - } - } - if (zipFile != null) { - try { - zipFile.close(); - } catch (Exception e) { - FileLog.e("messenger", e); - } - } - } - return false; - } - - public static synchronized void initNativeLibs(Context context) { - if (nativeLoaded) { - return; - } - - //String crashDir = context.getCacheDir().getAbsolutePath(); - - try { - String folder; - try { - if (Build.CPU_ABI.equalsIgnoreCase("armeabi-v7a")) { - folder = "armeabi-v7a"; - } else if (Build.CPU_ABI.equalsIgnoreCase("armeabi")) { - folder = "armeabi"; - } else if (Build.CPU_ABI.equalsIgnoreCase("x86")) { - folder = "x86"; - } else if (Build.CPU_ABI.equalsIgnoreCase("mips")) { - folder = "mips"; - } else { - folder = "armeabi"; - FileLog.e("messenger", "Unsupported arch: " + Build.CPU_ABI); - } - } catch (Exception e) { - FileLog.e("messenger", e); - folder = "armeabi"; - } - - String javaArch = System.getProperty("os.arch"); - if (javaArch != null && javaArch.contains("686")) { - folder = "x86"; - } - - - File destFile = getNativeLibraryDir(context); - if (destFile != null) { - destFile = new File(destFile, LIB_SO_NAME); - if (destFile.exists()) { - FileLog.d("messenger", "load normal lib"); - try { - System.loadLibrary(LIB_NAME); - //init(crashDir, BuildVars.DEBUG_VERSION); - nativeLoaded = true; - return; - } catch (Error e) { - FileLog.e("messenger", e); - } - } - } - - File destDir = new File(context.getFilesDir(), "lib"); - destDir.mkdirs(); - - File destLocalFile = new File(destDir, LOCALE_LIB_SO_NAME); - if (destLocalFile.exists()) { - try { - FileLog.d("messenger", "Load local lib"); - System.load(destLocalFile.getAbsolutePath()); - //init(crashDir, BuildVars.DEBUG_VERSION); - nativeLoaded = true; - return; - } catch (Error e) { - FileLog.e("messenger", e); - } - destLocalFile.delete(); - } - - FileLog.e("messenger", "Library not found, arch = " + folder); - - if (loadFromZip(context, destDir, destLocalFile, folder)) { - return; - } - } catch (Throwable e) { - e.printStackTrace(); - } - - try { - System.loadLibrary(LIB_NAME); - //init(crashDir, BuildVars.DEBUG_VERSION); - nativeLoaded = true; - } catch (Error e) { - FileLog.e("messenger", e); - } - } - - //private static native void init(String path, boolean enableGoglBreakpad); // not needed - //public static native void crash(); -}