package cm.android.util; import android.annotation.TargetApi; import android.content.Context; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.zip.ZipFile; import cm.java.util.IoUtil; /** * so文件加载器 */ public class LibLoader { /** * 拷贝so文件并加载至内存 */ @TargetApi(8) public static void load(Context context, String soFileName, String entryName) { File sopath = context.getDir("libs", Context.MODE_PRIVATE); File soname = new File(sopath, soFileName); try { if (!sopath.exists()) { boolean result = sopath.mkdirs(); } File zip = new File(context.getPackageCodePath()); ZipFile zipfile = new ZipFile(zip); boolean result = IoUtil.writeZipFile(zipfile, entryName, soname); if (result) { System.load(soname.getAbsolutePath()); } // System.load(LIBRARY_NAME); // setHyphenationMethod(HYPH_NONE, new byte[] {}); } catch (IOException e) { // log.e("cannot install " + LIBRARY_NAME + " library", e); } } /** * 拷贝so文件并加载至内存 * * @deprecated */ @Deprecated public static void load(Class klass, String libFileName) { try { URL location = klass.getProtectionDomain().getCodeSource() .getLocation(); ZipFile zf = new ZipFile(location.getPath()); // libhellojni.so is put in the lib folder String entryName = "libs/" + libFileName; File soname = File.createTempFile("JNI-", "Temp"); boolean result = IoUtil.writeZipFile(zf, entryName, soname); if (result) { System.load(soname.getAbsolutePath()); } boolean delete = soname.delete(); if (!delete) { // logger.debug("delete failed:cr = {}", cr.getAbsoluteFile()); } } catch (Exception e) { // I am still lazy ~~~ // e.printStackTrace(); } } }