- 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
| import android.content.Context; | |
| import android.content.res.Resources; | |
| import android.graphics.Bitmap; | |
| import android.graphics.BitmapFactory; | |
| import android.graphics.Canvas; | |
| import android.graphics.Point; | |
| import android.view.GestureDetector; | |
| import android.view.GestureDetector.SimpleOnGestureListener; | |
| import android.view.MotionEvent; |
| <?xml version="1.0" encoding="utf-8"?> | |
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | |
| package="de.mobilej.overlay" | |
| android:versionCode="1" | |
| android:versionName="1.0" > | |
| <uses-sdk android:minSdkVersion="14" /> | |
| <application android:label="SystemOverlay" > | |
| <activity |
| import org.junit.rules.TestRule; | |
| import org.junit.runner.Description; | |
| import org.junit.runners.model.Statement; | |
| /** Got flaky tests? Shampoo them away. */ | |
| public final class ShampooRule implements TestRule { | |
| private final int iterations; | |
| public ShampooRule(int iterations) { | |
| if (iterations < 1) throw new IllegalArgumentException("iterations < 1: " + iterations); |
| class ReverseProxyDispatcher extends Dispatcher { | |
| private final OkHttpClient client; | |
| private final HttpUrl serverUrl; | |
| public ReverseProxyDispatcher(HttpUrl url) { | |
| serverUrl = url; | |
| client = new OkHttpClient.Builder().build(); | |
| } | |
| @Override |
| interface ReverseProxyValidator { | |
| void validate(RecordedRequest request, Response response); | |
| } | |
| class ReverseProxyDispatcher extends Dispatcher { | |
| private final OkHttpClient client; | |
| private final HttpUrl serverUrl; | |
| private final ReverseProxyValidator validator; | |
| public ReverseProxyDispatcher(HttpUrl url, ReverseProxyValidator validator) { |
| 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 |
| //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") |
| /* | |
| * 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. | |
| * |
| 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(" ") | |
| } | |
| } | |
| } |