public void load(View view) { JniGg.getHello(); File dir = this.getDir("jniLibs", Activity.MODE_PRIVATE); File distFile = new File(dir.getAbsolutePath() + File.separator + "test.so"); if (copyFileFromAssets(this, "test.so", distFile.getAbsolutePath())) { System.load(distFile.getAbsolutePath()); } TextView textView = (TextView) findViewById(R.id.text); textView.setText(JniGg.getHello()); } public static boolean copyFileFromAssets(Context context, String fileName, String path) { boolean copyIsFinish = false; try { InputStream is = context.getAssets().open(fileName); File file = new File(path); file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); byte[] temp = new byte[1024]; int i = 0; while ((i = is.read(temp)) > 0) { fos.write(temp, 0, i); } fos.close(); is.close(); copyIsFinish = true; } catch (IOException e) { e.printStackTrace(); Log.e("MainActivity", "[copyFileFromAssets] IOException " + e.toString()); } return copyIsFinish; }
1/so名字可以任意取;
2/so只会加载一个,因为classLoader机制,所以需要重启;