I hereby claim:
- I am f2prateek on github.
- I am f2prateek (https://keybase.io/f2prateek) on keybase.
- I have a public key whose fingerprint is 39D2 2AF2 9FEA AE17 31BD 0B29 6D58 B458 1842 C429
To claim this, I am signing this object:
package net.cogindo.ssl; | |
import java.io.IOException; | |
import java.net.InetAddress; | |
import java.net.Socket; | |
import java.net.UnknownHostException; | |
import java.security.KeyManagementException; | |
import java.security.NoSuchAlgorithmException; | |
import javax.net.ssl.SSLContext; |
I hereby claim:
To claim this, I am signing this object:
package main | |
import ( | |
"encoding/json" | |
"fmt" | |
"log" | |
"os" | |
"strings" | |
"sync" |
try { | |
File dexFileOutputDir = context.getDir("dexFileOutput" + fileKey, Context.MODE_PRIVATE); | |
File dexFileOutputFile = new File(dexFileOutputDir, "dex"); | |
DexFile dx = | |
DexFile.loadDex(jarFile.getAbsolutePath(), dexFileOutputFile.getAbsolutePath(), 0); | |
// Print all classes in the DexFile | |
for (Enumeration<String> classNames = dx.entries(); classNames.hasMoreElements(); ) { | |
String className = classNames.nextElement(); | |
System.out.println("class: " + className); | |
} |
try { | |
ZipFile zipFile = new ZipFile(jarFile); | |
for (Enumeration<? extends ZipEntry> entries = zipFile.entries(); | |
entries.hasMoreElements(); ) { | |
String name = entries.nextElement().getName(); | |
System.out.println("entry: " + name); | |
} | |
} catch (IOException e) { | |
throw new RuntimeException(e); | |
} |
#Android and CI and Gradle (A How-To)
There are tech stacks in this world that make it dead simple to integrate a CI build system.
The Android platform is not one of them.
Although Gradle is getting better, it's still a bit non-deterministic, and some of the fixes you'll need will start to feel more like black magic than any sort of programming.
But fear not! It can be done!
Before we embark on our journey, you'll need a few things to run locally:
A java.util.Queue
implementation for Tape (does not support iteration).
Swapping implementations is easy!
@Module
class ProductionModule {
@Provides @Named("payloads") Queue<Payload> providePayloadQueue(File queueFile, Converter<Payload> payloadConverter) {
return new Tape<Payload>(queueFile, payloadConverter);
}
import java.io.InputStream; | |
import java.io.OutputStream; | |
public interface Converter { | |
public <T> T fromJson(InputStream in, Class<T> clazz) throws ConversionException; | |
public <T> void toJson(OutputStream os, T object) throws ConversionException; | |
public class ConversionException extends Exception { | |
public ConversionException(Throwable throwable) { |
// This is an aar, we'll ignore resources, and extract clases.jar | |
def outputDirName = "${buildDir}\\unpacked\\dist\\extracted" | |
System.out.println('Start') | |
print(file(outputDirName).list()) | |
def extract = project.tasks.create "jarExtract${it.name.capitalize()}", Copy | |
extract.from it | |
extract.into outputDirName | |
extract.execute() |