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