- Create a random key.
- Encrypt the random key via an SSH RSA public key
- Send the encrypted file and encrypted key
- Encrypt the key
- Encrypt the file
openssl genrsa -out rsa.private 4096
| Kotlin K2 FIR Example. Related Post: https://handstandsam.com/2024/05/30/kotlin-k2-fir-quickstart-guide/ |
| ext.reversedMap = [:] as Map<String, String> | |
| void buildReversedMap(String versionCatalogName) { | |
| def versionCatalog = rootProject.extensions | |
| .getByType(VersionCatalogsExtension).named(versionCatalogName) | |
| reversedMap = versionCatalog.getDependencyAliases() | |
| .collectEntries { alias -> | |
| def versionCatalogAlias = "${versionCatalogName}.${alias}" | |
| def module = versionCatalog.findDependency(alias).get().get() | |
| def fullModuleName = "${module.getModule()}:${module.getVersionConstraint()}" |
| import com.google.common.graph.Graphs | |
| import com.google.common.graph.MutableValueGraph | |
| import com.google.common.graph.ValueGraphBuilder | |
| import org.gradle.api.DefaultTask | |
| import org.gradle.api.Project | |
| import org.gradle.api.artifacts.Configuration | |
| import org.gradle.api.artifacts.ProjectDependency | |
| import org.gradle.api.tasks.Input | |
| import org.gradle.api.tasks.TaskAction | |
| import org.gradle.api.tasks.options.Option |
| from xml.dom.minidom import parseString | |
| # Documentation on Permissions in AndroidManifest.xml | |
| # https://developer.android.com/guide/topics/manifest/manifest-intro#perms | |
| data = '' # string data from file | |
| with open('AndroidManifest.xml', 'r') as f: | |
| data = f.read() | |
| dom = parseString(data) # parse file contents to xml dom |
| import androidx.compose.animation.core.Animatable | |
| import androidx.compose.animation.core.LinearEasing | |
| import androidx.compose.animation.core.tween | |
| import androidx.compose.foundation.Canvas | |
| import androidx.compose.foundation.border | |
| import androidx.compose.foundation.layout.Box | |
| import androidx.compose.foundation.layout.Column | |
| import androidx.compose.foundation.layout.fillMaxSize | |
| import androidx.compose.foundation.layout.height | |
| import androidx.compose.foundation.layout.padding |
| android.applicationVariants.all { variant -> | |
| task "open${variant.name.capitalize()}" { | |
| dependsOn "install${variant.name.capitalize()}" | |
| doLast { | |
| exec { | |
| commandLine "adb shell monkey -p ${variant.applicationId} -c android.intent.category.LAUNCHER 1".split(" ") | |
| } | |
| } | |
| } |
| /* | |
| * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. | |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| * | |
| * This code is free software; you can redistribute it and/or modify it | |
| * under the terms of the GNU General Public License version 2 only, as | |
| * published by the Free Software Foundation. Oracle designates this | |
| * particular file as subject to the "Classpath" exception as provided | |
| * by Oracle in the LICENSE file that accompanied this code. | |
| * |
| //region XcFramework tasks | |
| val xcFrameworkPath = "xcframework/${project.name}.xcframework" | |
| tasks.create<Delete>("deleteXcFramework") { delete = setOf(xcFrameworkPath) } | |
| val buildXcFramework by tasks.registering { | |
| dependsOn("deleteXcFramework") | |
| group = "build" | |
| val mode = "Release" | |
| val frameworks = arrayOf("iosArm64", "iosX64") |
| package com.example.myapplication | |
| import androidx.compose.animation.AnimatedVisibility | |
| import androidx.compose.animation.ExperimentalAnimationApi | |
| import androidx.compose.foundation.Box | |
| import androidx.compose.foundation.clickable | |
| import androidx.compose.foundation.layout.Arrangement | |
| import androidx.compose.foundation.layout.Column | |
| import androidx.compose.foundation.layout.Row | |
| import androidx.compose.foundation.layout.Spacer |