Android jna working

This commit is contained in:
Ugljesa Jovanovic 2021-02-21 11:40:16 +01:00
parent 8290586a12
commit 86cdc0da8f
No known key found for this signature in database
GPG Key ID: 178E6DFCECCB0E0F
14 changed files with 41 additions and 21 deletions

View File

@ -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")
}
} }
} }

View File

@ -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
/** /**

View File

@ -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
} }
} }

View File

@ -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

View File

@ -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)
} }
} }

View File

@ -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 {

View File

@ -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()}")
} }

View File

@ -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()}")
} // }
} // }
} }

View File

@ -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")