package org.gscript.jni; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.util.Log; @TargetApi(Build.VERSION_CODES.GINGERBREAD) public class NativeSupport { static final String LOG_TAG = "NativeSupport"; public static boolean prepare(Context context) { try { /* copy binaries ( for abi ) from asset folder * to /bin and make them executable */ String abi = android.os.Build.CPU_ABI; String dataDir = context.getApplicationInfo().dataDir; String abiDir = "bin/" + abi; String[] binaries = context.getAssets().list(abiDir); /* create bin folder */ File binFolder = new File(dataDir + "/bin"); if (!binFolder.exists()) { binFolder.mkdir(); } for (String binary : binaries) { File binFile = new File(dataDir + "/bin/" + binary); InputStream inputStream = context.getAssets().open( abiDir + "/" + binary); OutputStream out = new FileOutputStream(binFile); int read = 0; byte[] bytes = new byte[1024]; while ((read = inputStream.read(bytes)) != -1) { out.write(bytes, 0, read); } inputStream.close(); out.flush(); out.close(); /* TODO: fix for API level 8 */ binFile.setExecutable(true, false); Log.d(LOG_TAG, String.format("copied %s [ abi: %s ]", binary, abi)); } /* create ipc folder for gscript-input */ File ipcFolder = new File(dataDir + "/ipc"); if(!ipcFolder.exists()) { ipcFolder.mkdir(); } } catch (Exception ex) { return false; } return true; } }