diff --git a/buildSrc/src/main/kotlin/Deps.kt b/buildSrc/src/main/kotlin/Deps.kt index e8b420b..a29e32c 100644 --- a/buildSrc/src/main/kotlin/Deps.kt +++ b/buildSrc/src/main/kotlin/Deps.kt @@ -30,6 +30,13 @@ object Versions { val kotlinPoet = "1.6.0" + val sharedModule = "0.1.0-SNAPSHOT" + + val ktor = "1.3.2" + + val timber = "4.7.1" + + } @@ -52,6 +59,8 @@ object Deps { val kotlinBigNum = "com.ionspin.kotlin:bignum:${Versions.kotlinBigNumVersion}" val apiProject = ":multiplatform-crypto-api" + + val sharedModule = "com.ionspin.kotlin.crypto.sample:shared:${Versions.sharedModule}" } object Js { @@ -100,6 +109,15 @@ object Deps { } + object Android { + val coroutines = "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.kotlinCoroutines}" + val ktorClientOkHttp = "io.ktor:ktor-client-okhttp:${Versions.ktor}" + val ktorClient = "io.ktor:ktor-client-android:${Versions.ktor}" + val ktorClientSerialization = "io.ktor:ktor-client-serialization-jvm:${Versions.ktor}" + val serialization = "org.jetbrains.kotlinx:kotlinx-serialization-runtime:${Versions.kotlinSerialization}" + val timber = "com.jakewharton.timber:timber:${Versions.timber}" + } + } @@ -113,5 +131,8 @@ object PluginsDeps { val taskTree = "com.dorongold.task-tree" val androidLibrary = "com.android.library" val kotlinAndroidExtensions = "kotlin-android-extensions" + val androidApplication = "com.android.application" + val kotlinAndroid = "kotlin-android" + val kapt = "kotlin-kapt" } diff --git a/multiplatform-crypto-libsodium-bindings/build.gradle.kts b/multiplatform-crypto-libsodium-bindings/build.gradle.kts index f91c1bd..d38fad7 100644 --- a/multiplatform-crypto-libsodium-bindings/build.gradle.kts +++ b/multiplatform-crypto-libsodium-bindings/build.gradle.kts @@ -60,7 +60,7 @@ println("Idea active: $ideaActive") android { compileSdkVersion(29) defaultConfig { - minSdkVersion(24) + minSdkVersion(21) targetSdkVersion(29) versionCode = 1 versionName = "1.0" diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index 50171a8..ec6f87b 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -22,9 +22,11 @@ import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest plugins { kotlin(PluginsDeps.multiplatform) + id(PluginsDeps.kapt) + id(PluginsDeps.androidApplication) + id(PluginsDeps.kotlinAndroidExtensions) id (PluginsDeps.mavenPublish) id (PluginsDeps.signing) - id (PluginsDeps.node) version Versions.nodePlugin } val sonatypeStaging = "https://oss.sonatype.org/service/local/staging/deploy/maven2/" @@ -40,10 +42,11 @@ val sonatypeUsernameEnv : String? = System.getenv()["SONATYPE_USERNAME"] repositories { mavenCentral() jcenter() + maven("https://dl.bintray.com/terl/lazysodium-maven") } group = "com.ionspin.kotlin" -version = "0.0.4-SNAPSHOT" +version = "0.1.0-SNAPSHOT" val ideaActive = System.getProperty("idea.active") == "true" @@ -69,6 +72,9 @@ kotlin { } } + + android() + linuxX64("linux") { binaries { @@ -125,6 +131,23 @@ kotlin { } } } + + // select iOS target platform depending on the Xcode environment variables + val iOSTarget: (String, org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget.() -> Unit) -> org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget = + if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true) + ::iosArm64 + else + ::iosX64 + + iOSTarget("ios") { + binaries { + framework { + baseName = "LibsodiumBindingsSampleApplication" + export(Deps.Common.sharedModule) + freeCompilerArgs += ("-Xobjc-generics") + } + } + } } runningOnWindows { @@ -154,6 +177,34 @@ kotlin { } } + val androidMain by getting { + + dependencies { + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Versions.kotlin}") + implementation("androidx.appcompat:appcompat:1.2.0") + implementation("androidx.core:core-ktx:1.3.2") + implementation("androidx.constraintlayout:constraintlayout:2.0.2") + implementation("com.google.android.material:material:1.3.0-alpha03") +// implementation("androidx.ui:ui-tooling:$composeDevVersion") +// implementation("androidx.ui:ui-layout:$composeDevVersion") +// implementation("androidx.ui:ui-material:$composeDevVersion") +// implementation("androidx.ui:ui-foundation:$composeDevVersion") +// implementation("androidx.ui:ui-framework:$composeDevVersion") + implementation(Deps.Android.coroutines) + implementation(Deps.Android.timber) +// implementation("androidx.compose:compose-runtime:$composeDevVersion") + } + } + val androidTest by getting { + dependencies { + implementation(kotlin(Deps.Jvm.test)) + implementation(kotlin(Deps.Jvm.testJUnit)) + implementation(Deps.Jvm.coroutinesTest) + implementation(kotlin(Deps.Jvm.reflection)) + implementation(Deps.Jvm.coroutinesCore) + } + } + val nativeMain by creating { dependsOn(commonMain) @@ -265,6 +316,82 @@ kotlin { } +android { + compileSdkVersion(29) + defaultConfig { + applicationId = "com.ionspin.kotlin.crypto.sample" + minSdkVersion(21) + targetSdkVersion(29) + versionCode = 1 + versionName = "1.0" + testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + getByName("release") { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro") + } + } + sourceSets { + val main by getting + main.manifest.srcFile("src/androidMain/AndroidManifest.xml") + main.java.srcDirs("src/androidMain/kotlin") + main.res.srcDirs("src/androidMain/res") + } + packagingOptions { + exclude("META-INF/library_release.kotlin_module") + exclude("META-INF/kotlinx-serialization-runtime.kotlin_module") + exclude("META-INF/ktor-http.kotlin_module") + exclude("META-INF/ktor-utils.kotlin_module") + exclude("META-INF/ktor-io.kotlin_module") + exclude("META-INF/ktor-*") + } + compileOptions { + setSourceCompatibility(JavaVersion.VERSION_1_8) + setTargetCompatibility(JavaVersion.VERSION_1_8) + } + tasks.withType { + kotlinOptions { + jvmTarget = "1.8" + } + } + +// buildFeatures { +// // Enables Jetpack Compose for this module +// this.compose = true +// } + +// composeOptions { +// kotlinCompilerExtensionVersion = "0.1.0-dev05" +// } + + // Magic for compose dev08, but it doesn't work with serialization plugin because of IR. Leave here for future reference. +// project.tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.java) +// .configureEach { +// println("Task: $this") +// if (this.name.contains("Android")) { +// println("Setting plugins: $this") +// this.kotlinOptions.freeCompilerArgs += listOf( +// "-P", +// "plugin:androidx.compose.plugins.idea:enabled=true" +// ) +// this.kotlinOptions.freeCompilerArgs += "-Xplugin=${project.rootDir}/compose-compiler-0.1.0-dev08.jar" +// this.kotlinOptions.freeCompilerArgs += "-Xuse-ir" +// } +// } +// project.tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.java) +// .forEach { compile -> +// compile.kotlinOptions.freeCompilerArgs += listOf( +// "-P", +// "plugin:androidx.compose.plugins.idea:enabled=true" +// ) +// compile.kotlinOptions.freeCompilerArgs += "-Xplugin=${project.rootDir}/compose-compiler-0.1.0-dev08.jar" +// compile.kotlinOptions.freeCompilerArgs += "-Xuse-ir" +// println("Compile: $compile") +// println("Compiler free args ${compile.kotlinOptions.freeCompilerArgs}") +// } +} + tasks { diff --git a/sample/src/androidMain/AndroidManifest.xml b/sample/src/androidMain/AndroidManifest.xml new file mode 100644 index 0000000..1cf861a --- /dev/null +++ b/sample/src/androidMain/AndroidManifest.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + diff --git a/sample/src/androidMain/kotlin/com/ionspin/kotlin/crypto/sample/LibsodiumBindingsSampleApp.kt b/sample/src/androidMain/kotlin/com/ionspin/kotlin/crypto/sample/LibsodiumBindingsSampleApp.kt new file mode 100644 index 0000000..38ebe9d --- /dev/null +++ b/sample/src/androidMain/kotlin/com/ionspin/kotlin/crypto/sample/LibsodiumBindingsSampleApp.kt @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2020 Ugljesa Jovanovic (ugljesa.jovanovic@ionspin.com) + */ + +package com.ionspin.kotlin.crypto.sample + +import android.app.Application +import com.ionspin.kotlin.crypto.LibsodiumInitializer +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.async +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import timber.log.Timber + +/** + * @author [Ugljesa Jovanovic](ugi@mobilabsolutions.com) + */ +class LibsodiumBindingsSampleApp : Application() { + + override fun onCreate() { + super.onCreate() + Timber.plant(Timber.DebugTree()) + val initialization = GlobalScope.async { + LibsodiumInitializer.initialize() + } + runBlocking { + initialization.await() + } + + } +} diff --git a/sample/src/androidMain/kotlin/com/ionspin/kotlin/crypto/sample/MainActivity.kt b/sample/src/androidMain/kotlin/com/ionspin/kotlin/crypto/sample/MainActivity.kt new file mode 100644 index 0000000..f484737 --- /dev/null +++ b/sample/src/androidMain/kotlin/com/ionspin/kotlin/crypto/sample/MainActivity.kt @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2020 Ugljesa Jovanovic (ugljesa.jovanovic@ionspin.com) + */ + +package com.ionspin.kotlin.crypto.sample + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.ionspin.kotlin.crypto.hash.Hash +import com.ionspin.kotlin.crypto.util.encodeToUByteArray +import com.ionspin.kotlin.crypto.util.toHexString +import kotlinx.android.synthetic.main.activity_main.* + +class MainActivity : AppCompatActivity() { + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + val hash = Hash.sha512("123".encodeToUByteArray()) + helloWorldTextView.setText("Hash (SHA512) of 123: ${hash.toHexString()}") + + + } + +} diff --git a/sample/src/androidMain/res/drawable-v24/ic_launcher_foreground.xml b/sample/src/androidMain/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..c82f3ae --- /dev/null +++ b/sample/src/androidMain/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/sample/src/androidMain/res/drawable/ic_launcher_background.xml b/sample/src/androidMain/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..5aac4c9 --- /dev/null +++ b/sample/src/androidMain/res/drawable/ic_launcher_background.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sample/src/androidMain/res/layout/activity_main.xml b/sample/src/androidMain/res/layout/activity_main.xml new file mode 100644 index 0000000..2510cdc --- /dev/null +++ b/sample/src/androidMain/res/layout/activity_main.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml b/sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..30ebbd4 --- /dev/null +++ b/sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml b/sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..30ebbd4 --- /dev/null +++ b/sample/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/sample/src/androidMain/res/mipmap-hdpi/ic_launcher.png b/sample/src/androidMain/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..a571e60 Binary files /dev/null and b/sample/src/androidMain/res/mipmap-hdpi/ic_launcher.png differ diff --git a/sample/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png b/sample/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..61da551 Binary files /dev/null and b/sample/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/sample/src/androidMain/res/mipmap-mdpi/ic_launcher.png b/sample/src/androidMain/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..c41dd28 Binary files /dev/null and b/sample/src/androidMain/res/mipmap-mdpi/ic_launcher.png differ diff --git a/sample/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png b/sample/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..db5080a Binary files /dev/null and b/sample/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/sample/src/androidMain/res/mipmap-xhdpi/ic_launcher.png b/sample/src/androidMain/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..6dba46d Binary files /dev/null and b/sample/src/androidMain/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/sample/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png b/sample/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..da31a87 Binary files /dev/null and b/sample/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png b/sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..15ac681 Binary files /dev/null and b/sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png b/sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..b216f2d Binary files /dev/null and b/sample/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png b/sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..f25a419 Binary files /dev/null and b/sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png b/sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..e96783c Binary files /dev/null and b/sample/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/sample/src/androidMain/res/values/colors.xml b/sample/src/androidMain/res/values/colors.xml new file mode 100644 index 0000000..56c95a6 --- /dev/null +++ b/sample/src/androidMain/res/values/colors.xml @@ -0,0 +1,11 @@ + + + + + #0069A1 + #004970 + #FF5722 + #FF656565 + diff --git a/sample/src/androidMain/res/values/dimen.xml b/sample/src/androidMain/res/values/dimen.xml new file mode 100644 index 0000000..971418e --- /dev/null +++ b/sample/src/androidMain/res/values/dimen.xml @@ -0,0 +1,8 @@ + + + + + 16dp + \ No newline at end of file diff --git a/sample/src/androidMain/res/values/strings.xml b/sample/src/androidMain/res/values/strings.xml new file mode 100644 index 0000000..231daf2 --- /dev/null +++ b/sample/src/androidMain/res/values/strings.xml @@ -0,0 +1,7 @@ + + + + Lbsodium Bindings Sample + diff --git a/sample/src/androidMain/res/values/styles.xml b/sample/src/androidMain/res/values/styles.xml new file mode 100644 index 0000000..cd9e26a --- /dev/null +++ b/sample/src/androidMain/res/values/styles.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/sample/src/androidTest/kotlin/com/ionspin/kotlin/core/Placeholder b/sample/src/androidTest/kotlin/com/ionspin/kotlin/core/Placeholder new file mode 100644 index 0000000..e69de29