private String extractLibrary (String sharedLibName) { String srcCrc = crc(JniGenSharedLibraryLoader.class.getResourceAsStream("/" + sharedLibName)); File nativesDir = new File(System.getProperty("java.io.tmpdir") + "/jnigen/" + srcCrc); File nativeFile = new File(nativesDir, sharedLibName); if (nativeFile.exists()) { try { extractedCrc = crc(new FileInputStream(nativeFile)); } catch (FileNotFoundException ignored) { input = JniGenSharedLibraryLoader.class.getResourceAsStream("/" + sharedLibName); else input = getFromJar(nativesJar, sharedLibName); if (input == null) return null; nativeFile.getParentFile().mkdirs();
private boolean loadLibrary (String sharedLibName) { if (sharedLibName == null) return false; String path = extractLibrary(sharedLibName); if (path != null) System.load(path); return path != null; }
if (isWindows) { if (libraryFinder != null) loaded = loadLibrary(libraryFinder.getSharedLibraryNameWindows(sharedLibName, is64Bit, nativesZip)); else if (!is64Bit) loaded = loadLibrary(sharedLibName + ".dll"); else loaded = loadLibrary(sharedLibName + "64.dll"); loaded = loadLibrary(libraryFinder.getSharedLibraryNameLinux(sharedLibName, is64Bit, isArm, nativesZip)); else if (!is64Bit) { if (isArm) loaded = loadLibrary("lib" + sharedLibName + "Arm.so"); else loaded = loadLibrary("lib" + sharedLibName + ".so"); } else { if (isArm) loaded = loadLibrary("lib" + sharedLibName + "Arm64.so"); else loaded = loadLibrary("lib" + sharedLibName + "64.so"); loaded = loadLibrary(libraryFinder.getSharedLibraryNameMac(sharedLibName, is64Bit, nativesZip)); else if (!is64Bit) loaded = loadLibrary("lib" + sharedLibName + ".dylib"); else loaded = loadLibrary("lib" + sharedLibName + "64.dylib");
public static void main(String[] args) throws Exception { // generate C/C++ code new NativeCodeGenerator().generate("src", "bin", "jni", new String[] { "**/MyJniClass.java" }, null); // generate build scripts, for win32 and linux64 only BuildConfig buildConfig = new BuildConfig("test"); BuildTarget win32 = BuildTarget.newDefaultTarget(TargetOs.Windows, false); win32.compilerPrefix = ""; win32.cppFlags += " -g"; BuildTarget lin64 = BuildTarget.newDefaultTarget(TargetOs.Linux, true); new AntScriptGenerator().generate(buildConfig, win32, lin64); // build natives BuildExecutor.executeAnt("jni/build-linux64.xml", "-v -Dhas-compiler=true clean postcompile"); BuildExecutor.executeAnt("jni/build.xml", "-v pack-natives"); // load the test-natives.jar and from it the shared library, then execute the test. new JniGenSharedLibraryLoader("libs/test-natives.jar").load("test"); ByteBuffer buffer = ByteBuffer.allocateDirect(1); buffer.put(0, (byte)8); MyJniClass.test( true, (byte)1, (char)2, (short)3, 4, 5, 6, 7, buffer, new boolean[] { false }, new char[] { 9 }, new short[] { 10 }, new int[] { 11 }, new long[] { 12 }, new float[] { 13 }, new double[] { 14 }, null, "Hurray", MyJniClass.class, new RuntimeException(), new MyJniClass()); } }
new JniGenSharedLibraryLoader().load("foo"); System.out.println(add(1, 2));
public static void main(String[] args) throws Exception { // generate C/C++ code new NativeCodeGenerator().generate("src", "bin", "jni", new String[] { "**/MyJniClass.java" }, null); // generate build scripts, for win32 and linux64 only BuildConfig buildConfig = new BuildConfig("test"); BuildTarget win32 = BuildTarget.newDefaultTarget(TargetOs.Windows, false); win32.compilerPrefix = ""; win32.cppFlags += " -g"; BuildTarget lin64 = BuildTarget.newDefaultTarget(TargetOs.Linux, true); new AntScriptGenerator().generate(buildConfig, win32, lin64); // build natives BuildExecutor.executeAnt("jni/build-linux64.xml", "-v -Dhas-compiler=true clean postcompile"); BuildExecutor.executeAnt("jni/build.xml", "-v pack-natives"); // load the test-natives.jar and from it the shared library, then execute the test. new JniGenSharedLibraryLoader("libs/test-natives.jar").load("test"); ByteBuffer buffer = ByteBuffer.allocateDirect(1); buffer.put(0, (byte)8); MyJniClass.test( true, (byte)1, (char)2, (short)3, 4, 5, 6, 7, buffer, new boolean[] { false }, new char[] { 9 }, new short[] { 10 }, new int[] { 11 }, new long[] { 12 }, new float[] { 13 }, new double[] { 14 }, null, "Hurray", MyJniClass.class, new RuntimeException(), new MyJniClass()); } }
public static void main(String[] args) throws Exception { // generate C/C++ code new NativeCodeGenerator().generate("src", "bin", "jni", new String[] { "**/MyJniClass.java" }, null); // generate build scripts, for win32 and linux64 only BuildConfig buildConfig = new BuildConfig("test"); BuildTarget win32 = BuildTarget.newDefaultTarget(TargetOs.Windows, false); win32.compilerPrefix = ""; win32.cppFlags += " -g"; BuildTarget lin64 = BuildTarget.newDefaultTarget(TargetOs.Linux, true); new AntScriptGenerator().generate(buildConfig, win32, lin64); // build natives BuildExecutor.executeAnt("jni/build-linux64.xml", "-v -Dhas-compiler=true clean postcompile"); BuildExecutor.executeAnt("jni/build.xml", "-v pack-natives"); // load the test-natives.jar and from it the shared library, then execute the test. new JniGenSharedLibraryLoader("libs/test-natives.jar").load("test"); ByteBuffer buffer = ByteBuffer.allocateDirect(1); buffer.put(0, (byte)8); MyJniClass.test( true, (byte)1, (char)2, (short)3, 4, 5, 6, 7, buffer, new boolean[] { false }, new char[] { 9 }, new short[] { 10 }, new int[] { 11 }, new long[] { 12 }, new float[] { 13 }, new double[] { 14 }, null, "Hurray", MyJniClass.class, new RuntimeException(), new MyJniClass()); } }
private String extractLibrary (String sharedLibName) { String srcCrc = crc(JniGenSharedLibraryLoader.class.getResourceAsStream("/" + sharedLibName)); File nativesDir = new File(System.getProperty("java.io.tmpdir") + "/jnigen/" + srcCrc); File nativeFile = new File(nativesDir, sharedLibName); if (nativeFile.exists()) { try { extractedCrc = crc(new FileInputStream(nativeFile)); } catch (FileNotFoundException ignored) { input = JniGenSharedLibraryLoader.class.getResourceAsStream("/" + sharedLibName); else input = getFromJar(nativesJar, sharedLibName); if (input == null) return null; nativeFile.getParentFile().mkdirs();
private boolean loadLibrary (String sharedLibName) { if (sharedLibName == null) return false; String path = extractLibrary(sharedLibName); if (path != null) System.load(path); return path != null; }
if (isWindows) { if (libraryFinder != null) loaded = loadLibrary(libraryFinder.getSharedLibraryNameWindows(sharedLibName, is64Bit, nativesZip)); else if (!is64Bit) loaded = loadLibrary(sharedLibName + ".dll"); else loaded = loadLibrary(sharedLibName + "64.dll"); loaded = loadLibrary(libraryFinder.getSharedLibraryNameLinux(sharedLibName, is64Bit, isArm, nativesZip)); else if (!is64Bit) { if (isArm) loaded = loadLibrary("lib" + sharedLibName + "Arm.so"); else loaded = loadLibrary("lib" + sharedLibName + ".so"); } else { if (isArm) loaded = loadLibrary("lib" + sharedLibName + "Arm64.so"); else loaded = loadLibrary("lib" + sharedLibName + "64.so"); loaded = loadLibrary(libraryFinder.getSharedLibraryNameMac(sharedLibName, is64Bit, nativesZip)); else if (!is64Bit) loaded = loadLibrary("lib" + sharedLibName + ".dylib"); else loaded = loadLibrary("lib" + sharedLibName + "64.dylib");
private String extractLibrary (String sharedLibName) { String srcCrc = crc(JniGenSharedLibraryLoader.class.getResourceAsStream("/" + sharedLibName)); File nativesDir = new File(System.getProperty("java.io.tmpdir") + "/jnigen/" + srcCrc); File nativeFile = new File(nativesDir, sharedLibName); if (nativeFile.exists()) { try { extractedCrc = crc(new FileInputStream(nativeFile)); } catch (FileNotFoundException ignored) { input = JniGenSharedLibraryLoader.class.getResourceAsStream("/" + sharedLibName); else input = getFromJar(nativesJar, sharedLibName); if (input == null) return null; nativeFile.getParentFile().mkdirs();
private boolean loadLibrary (String sharedLibName) { if (sharedLibName == null) return false; String path = extractLibrary(sharedLibName); if (path != null) System.load(path); return path != null; }
if (isWindows) { if (libraryFinder != null) loaded = loadLibrary(libraryFinder.getSharedLibraryNameWindows(sharedLibName, is64Bit, nativesZip)); else if (!is64Bit) loaded = loadLibrary(sharedLibName + ".dll"); else loaded = loadLibrary(sharedLibName + "64.dll"); loaded = loadLibrary(libraryFinder.getSharedLibraryNameLinux(sharedLibName, is64Bit, isArm, nativesZip)); else if (!is64Bit) { if (isArm) loaded = loadLibrary("lib" + sharedLibName + "Arm.so"); else loaded = loadLibrary("lib" + sharedLibName + ".so"); } else { if (isArm) loaded = loadLibrary("lib" + sharedLibName + "Arm64.so"); else loaded = loadLibrary("lib" + sharedLibName + "64.so"); loaded = loadLibrary(libraryFinder.getSharedLibraryNameMac(sharedLibName, is64Bit, nativesZip)); else if (!is64Bit) loaded = loadLibrary("lib" + sharedLibName + ".dylib"); else loaded = loadLibrary("lib" + sharedLibName + "64.dylib");