diff --git a/src/main/java/monero/common/MoneroUtils.java b/src/main/java/monero/common/MoneroUtils.java index f81f8e2e..04fa3520 100644 --- a/src/main/java/monero/common/MoneroUtils.java +++ b/src/main/java/monero/common/MoneroUtils.java @@ -41,11 +41,6 @@ public static String getVersion() { return "0.8.29"; } - // try to load jni bindings - static { - tryLoadNativeLibrary(); - } - /** * Try to load the native library if not already loaded. */ @@ -58,6 +53,9 @@ public static void tryLoadNativeLibrary() { public static void loadNativeLibrary() { + // skip if already loaded + if (isNativeLibraryLoaded()) return; + // try to load from java library path try { String libName = (System.getProperty("os.name").toLowerCase().contains("windows") ? "lib" : "") + "monero-java"; @@ -136,7 +134,7 @@ public static void loadNativeLibrary() { */ public static boolean isNativeLibraryLoaded() { try { - mapToBinary(new HashMap<>()); + jsonToBinaryJni(JsonUtils.serialize(new HashMap<>())); return true; } catch (Exception | UnsatisfiedLinkError e) { return false; @@ -309,6 +307,7 @@ public static void validatePublicSpendKey(String publicSpendKey) { * @return the integrated address */ public static MoneroIntegratedAddress getIntegratedAddress(MoneroNetworkType networkType, String standardAddress, String paymentId) { + loadNativeLibrary(); try { return JsonUtils.deserialize(getIntegratedAddressJni(networkType.ordinal(), standardAddress, paymentId == null ? "" : paymentId), MoneroIntegratedAddress.class); } catch (Exception err) { @@ -482,10 +481,12 @@ public static void mergeTx(List txs, T tx) { } public static byte[] mapToBinary(Map map) { + loadNativeLibrary(); return jsonToBinaryJni(JsonUtils.serialize(map)); } public static Map binaryToMap(byte[] bin) { + loadNativeLibrary(); return JsonUtils.deserialize(binaryToJsonJni(bin), new TypeReference>(){}); } @@ -493,6 +494,7 @@ public static Map binaryToMap(byte[] bin) { public static Map binaryBlocksToMap(byte[] binBlocks) { // convert binary blocks to json then to map + loadNativeLibrary(); Map map = JsonUtils.deserialize(MoneroRpcConnection.MAPPER, binaryBlocksToJsonJni(binBlocks), new TypeReference>(){}); // parse blocks to maps @@ -560,6 +562,7 @@ public static int getLogLevel() { * @param console specifies whether or not to write to the console */ public static void configureNativeLogging(String path, boolean console) { + loadNativeLibrary(); configureLoggingJni(path, console); }