Android jna working
This commit is contained in:
parent
8290586a12
commit
86cdc0da8f
@ -73,6 +73,9 @@ android {
|
|||||||
isMinifyEnabled = false
|
isMinifyEnabled = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sourceSets.getByName("main") {
|
||||||
|
jniLibs.srcDir("libs")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -447,6 +450,9 @@ kotlin {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation("com.goterl.lazycode:lazysodium-android:4.2.0@aar")
|
implementation("com.goterl.lazycode:lazysodium-android:4.2.0@aar")
|
||||||
implementation("net.java.dev.jna:jna:5.5.0@aar")
|
implementation("net.java.dev.jna:jna:5.5.0@aar")
|
||||||
|
implementation(Deps.Jvm.resourceLoader) {
|
||||||
|
exclude("net.java.dev.jna", "jna")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
package com.ionspin.kotlin.crypto
|
package com.ionspin.kotlin.crypto
|
||||||
|
|
||||||
import com.goterl.lazycode.lazysodium.LazySodiumAndroid
|
|
||||||
import com.goterl.lazycode.lazysodium.SodiumAndroid
|
import com.goterl.lazycode.lazysodium.SodiumAndroid
|
||||||
|
import com.ionspin.kotlin.crypto.jnitest.SodiumVersion
|
||||||
|
import com.sun.jna.Native
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/x86/libsodium.so
Executable file
BIN
multiplatform-crypto-libsodium-bindings/src/androidSpecific/lib/x86/libsodium.so
Executable file
Binary file not shown.
Binary file not shown.
@ -4,11 +4,9 @@ import co.libly.resourceloader.FileLoader
|
|||||||
import co.libly.resourceloader.ResourceLoader
|
import co.libly.resourceloader.ResourceLoader
|
||||||
import com.sun.jna.Library
|
import com.sun.jna.Library
|
||||||
import com.sun.jna.Native
|
import com.sun.jna.Native
|
||||||
import com.sun.jna.NativeLibrary
|
|
||||||
import com.sun.jna.Platform
|
import com.sun.jna.Platform
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.lang.RuntimeException
|
import java.lang.RuntimeException
|
||||||
import kotlin.test.assertEquals
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Ugljesa Jovanovic
|
* Created by Ugljesa Jovanovic
|
||||||
@ -17,7 +15,7 @@ import kotlin.test.assertEquals
|
|||||||
*/
|
*/
|
||||||
object JniTest {
|
object JniTest {
|
||||||
|
|
||||||
fun work() {
|
fun work() : String {
|
||||||
val libraryFile = when {
|
val libraryFile = when {
|
||||||
Platform.isMac() -> {
|
Platform.isMac() -> {
|
||||||
FileLoader.get().load("dynamic-macos-x86-64.dylib", Any::class.java)
|
FileLoader.get().load("dynamic-macos-x86-64.dylib", Any::class.java)
|
||||||
@ -29,20 +27,28 @@ object JniTest {
|
|||||||
FileLoader.get().load("dynamic-msvc-x86-64-libsodium.dll", Any::class.java)
|
FileLoader.get().load("dynamic-msvc-x86-64-libsodium.dll", Any::class.java)
|
||||||
}
|
}
|
||||||
Platform.isAndroid() -> {
|
Platform.isAndroid() -> {
|
||||||
File("/home/ionspin/Projects/Future/kotlin-multiplatform-libsodium/multiplatform-crypto-libsodium-bindings/src/jvmMain/resources/dynamic-linux-x86-64-libsodium.so")
|
when {
|
||||||
|
Platform.is64Bit() -> {
|
||||||
|
File("irrelevant")
|
||||||
|
}
|
||||||
|
else -> throw RuntimeException("Unsupported platform")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else -> throw RuntimeException("Unknown platform")
|
else -> throw RuntimeException("Unknown platform")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val loaded = if (Platform.isAndroid()) {
|
||||||
|
Native.load("sodium", SodiumVersion::class.java) as SodiumVersion
|
||||||
|
} else {
|
||||||
|
Native.load(libraryFile.absolutePath, SodiumVersion::class.java) as SodiumVersion
|
||||||
|
}
|
||||||
println(libraryFile.absoluteFile)
|
println(libraryFile.absoluteFile)
|
||||||
val loaded = Native.load(libraryFile.absolutePath, SodiumVersion::class.java) as SodiumVersion
|
|
||||||
val version = loaded.sodium_version_string()
|
val version = loaded.sodium_version_string()
|
||||||
|
|
||||||
println("Loaded ${loaded.sodium_version_string()}")
|
println("Loaded ${loaded.sodium_version_string()}")
|
||||||
assertEquals("1.0.18", version)
|
return version
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@ package com.ionspin.kotlin.crypto
|
|||||||
|
|
||||||
import com.goterl.lazycode.lazysodium.LazySodiumJava
|
import com.goterl.lazycode.lazysodium.LazySodiumJava
|
||||||
import com.goterl.lazycode.lazysodium.SodiumJava
|
import com.goterl.lazycode.lazysodium.SodiumJava
|
||||||
|
import com.ionspin.kotlin.crypto.jnitest.JniTest
|
||||||
|
import com.ionspin.kotlin.crypto.jnitest.SodiumVersion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Ugljesa Jovanovic
|
* Created by Ugljesa Jovanovic
|
||||||
@ -9,3 +11,4 @@ import com.goterl.lazycode.lazysodium.SodiumJava
|
|||||||
* on 22-Aug-2020
|
* on 22-Aug-2020
|
||||||
*/
|
*/
|
||||||
typealias SodiumWrapper = SodiumJava
|
typealias SodiumWrapper = SodiumJava
|
||||||
|
typealias JniTestWrapper = SodiumVersion
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.ionspin.kotlin.crypto.jnitest
|
package com.ionspin.kotlin.crypto.jnitest
|
||||||
|
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Ugljesa Jovanovic
|
* Created by Ugljesa Jovanovic
|
||||||
@ -11,6 +12,7 @@ class JniTestTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testJniTest() {
|
fun testJniTest() {
|
||||||
JniTest.work()
|
val result = JniTest.work()
|
||||||
|
assertEquals("1.0.18", result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ kotlin {
|
|||||||
android()
|
android()
|
||||||
runningOnLinuxx86_64 {
|
runningOnLinuxx86_64 {
|
||||||
jvm()
|
jvm()
|
||||||
js {
|
js(IR) {
|
||||||
browser {
|
browser {
|
||||||
webpackTask {
|
webpackTask {
|
||||||
|
|
||||||
@ -188,7 +188,7 @@ kotlin {
|
|||||||
implementation(kotlin(Deps.Common.test))
|
implementation(kotlin(Deps.Common.test))
|
||||||
implementation(Deps.Common.kotlinBigNum)
|
implementation(Deps.Common.kotlinBigNum)
|
||||||
implementation(Deps.Common.serialization)
|
implementation(Deps.Common.serialization)
|
||||||
api(Deps.Common.libsodiumBindings)
|
api(project(":multiplatform-crypto-libsodium-bindings"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val commonTest by getting {
|
val commonTest by getting {
|
||||||
|
@ -7,6 +7,7 @@ package com.ionspin.kotlin.crypto.sample
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.ionspin.kotlin.crypto.hash.Hash
|
import com.ionspin.kotlin.crypto.hash.Hash
|
||||||
|
import com.ionspin.kotlin.crypto.jnitest.JniTest
|
||||||
import com.ionspin.kotlin.crypto.util.encodeToUByteArray
|
import com.ionspin.kotlin.crypto.util.encodeToUByteArray
|
||||||
import com.ionspin.kotlin.crypto.util.toHexString
|
import com.ionspin.kotlin.crypto.util.toHexString
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
@ -18,7 +19,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
val hash = Hash.sha512("123".encodeToUByteArray())
|
val hash = Hash.sha512("123".encodeToUByteArray())
|
||||||
helloWorldTextView.setText("Hash (SHA512) of 123: ${hash.toHexString()}")
|
helloWorldTextView.setText("Hash (SHA512) of 123: ${hash.toHexString()} \nSodium version: ${JniTest.work()}")
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,11 +7,12 @@ import com.ionspin.kotlin.crypto.util.encodeToUByteArray
|
|||||||
import com.ionspin.kotlin.crypto.util.toHexString
|
import com.ionspin.kotlin.crypto.util.toHexString
|
||||||
import react.dom.render
|
import react.dom.render
|
||||||
import kotlinx.browser.document
|
import kotlinx.browser.document
|
||||||
import kotlin.browser.window
|
import kotlinx.browser.window
|
||||||
|
|
||||||
|
|
||||||
fun main() {
|
fun main() {
|
||||||
val runningOnNode = jsTypeOf(window) == "undefined"
|
val runningOnNode = jsTypeOf(window) == "undefined"
|
||||||
if (!runningOnNode) = runTest {
|
// if (!runningOnNode) = runTest {
|
||||||
LibsodiumInitializer.initializeWithCallback {
|
LibsodiumInitializer.initializeWithCallback {
|
||||||
render(document.getElementById("root")) {
|
render(document.getElementById("root")) {
|
||||||
app {
|
app {
|
||||||
@ -19,10 +20,10 @@ fun main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else = runTest {
|
// } else = runTest {
|
||||||
LibsodiumInitializer.initializeWithCallback {
|
// LibsodiumInitializer.initializeWithCallback {
|
||||||
val hash = Hash.sha512("123".encodeToUByteArray())
|
// val hash = Hash.sha512("123".encodeToUByteArray())
|
||||||
println("Hash (SHA512) of 123: ${hash.toHexString()}")
|
// println("Hash (SHA512) of 123: ${hash.toHexString()}")
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
@ -37,5 +37,5 @@ enableFeaturePreview("GRADLE_METADATA")
|
|||||||
rootProject.name = "KotlinMultiplatformLibsodium"
|
rootProject.name = "KotlinMultiplatformLibsodium"
|
||||||
include("multiplatform-crypto-api")
|
include("multiplatform-crypto-api")
|
||||||
include("multiplatform-crypto-libsodium-bindings")
|
include("multiplatform-crypto-libsodium-bindings")
|
||||||
//include("sample")
|
include("sample")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user