Android – Compartilhar código entre teste unit e instrumental ( Sharing code between unit tests and instrumentation tests on Android )

android_testing-1

Suponhamos que você tenha uma aplicação android com uma serie de testes. Alguns deles são testes unitários (unit tests), localizados em: src/test, e testes instrumentais (intrumentation tests), localizados em: src/androidTest.

O problema encontrado é que muitas vezes temos códigos que poderiam ser compartilhados entre esses testes, mas não temos como fazer isso pois estão em pastas diferentes, e não seria adequado inserir esses códigos auxiliares no src/main.

A solução encontrada é acrescentar um novo pacote de testes que seja compartilhado entre o src/test e o src/androidTest, para isso vamos criar um src/sharedTest e configurar o sourceSets do test e androidTest para visualizar o sheredTest.

Para isso primeiramente vamos criar o novo pacote de testes: src/sharedTest/java/{pakage_do_projeto}
Obs: Importante criar o package do projeto para assimilar com os outros testes.

Agora basta configurar o build.gradle da seguinte maneira: Continue reading

Android – Accessing hidden method Ljava/lang/Thread – Coroutines do not log uncaught exceptions in Android

kotlin_android_ktVerificar Issue: https://github.com/Kotlin/kotlinx.coroutines/issues/148#issuecomment-338101986

Solução que utilizei:

val handler = CoroutineExceptionHandler { _, ex ->
  ex.printStackTrace() //TODO
}
launch(CommonPool + handler) {
   //your code here
}

Android – Configurando o Dagger com Worker (Dagger 2 setup with WorkManager)

dagger-dependency-injection

No exemplo a seguir mostro como configurar o Dagger 2 para trabalhar com o WorkManager.
Atualmente é uma tarefa bem complicada e que possivelmente sofrerá alterações em sua implementação pois o WorkManager é uma nova API do Android e o Dagger2 ainda não tem recursos para facilitar a implementação de injeção de dependências nela.

Este artigo está utilizando as seguintes versões:

dagger2: “com.google.dagger:dagger-android:2.20″
workmanager: “android.arch.work:work-runtime-ktx:1.0.0-beta04″

Veja a implementação: Continue reading

Kotlin – Dicas de como utilizar as Standard Funcions – ‘run’, ‘let’, ‘apply’ and ‘also’ (Kotlin Standard Functions cheat-sheet)

kotlin_android_kt

Todas essas funções funcionam de maneira semelhante, no sentido em que permitem alterar o escopo da função ou variável atual e, ao mesmo tempo, aplicar várias operações nessa mesma variável, tudo no mesmo lugar. Segue um flowchart bem interessante que encontrei em uma publicação no Medium/androiddevelopers para auxiliar na escolha: Continue reading

Linux – Corrigindo: “gpg: failed to start the dirmngr ‘/usr/bin/dirmngr’: No such file or directory” (How to fix missing dirmngr)

hard-tux-process

Problema ao executar apt-key adv

user@machine:~# sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 931FF8E79F0876134EDDBDCCA87FF9DF48BF1C90
Executing: /tmp/apt-key-gpghome.uEp0ISpwUD/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 931FF8E79F0876134EDDBDCCA87FF9DF48BF1C90
gpg: failed to start the dirmngr '/usr/bin/dirmngr': No such file or directory
gpg: connecting dirmngr at '/tmp/apt-key-gpghome.uEp0ISpwUD/S.dirmngr' failed: No such file or directory
gpg: keyserver receive failed: No dirmngr

Para corrigir basta executar:

user@machine:~# sudo apt-get install dirmngr --install-recommends

DONE!

Java – Retirando a implementação do SLF4J de dependências

java Se você estiver utilizando alguma biblioteca em seu sistema que contenha alguma implementação do SLF4J , você pode retirar a mesma utilizando a dependência do SLF4J ‘slf4j-nop’ (non-operation). Um dos motivos para retira-lo é estar logando na System.out do sistema informações de log. Para retirar basta incluir a seguinte dependência:

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>1.7.25</version>
        </dependency>

Java / .Net – SourceAFIS – Biblioteca de reconhecimento de impressões digitais – (Fingerprint recognition library)

fingerprint

SourceAFIS

for Java and .NET

SourceAFIS é um algoritmo que reconhece impressões digitais humanas. Ele pode comparar duas impressões digitais 1: 1 ou pesquisar um grande banco de dados 1: N para impressão digital correspondente. Ele pega imagens de impressões digitais na entrada e produz uma pontuação de similaridade na saída. A pontuação de similaridade é então comparada com o limite de correspondência personalizável.

O algoritmo SourceAFIS tem duas implementações de código aberto quase idênticas em Java puro e .NET puro. API SourceAFIS é projetado para máxima simplicidade e facilidade de uso por desenvolvedores de aplicativos. Precisão e velocidade de correspondência são suficientes para a maioria das aplicações..

Algorithm

O algoritmo SourceAFIS é o resultado do design de algoritmo independente. Não apenas copia algum algoritmo de livro didático. No entanto, ele empresta muito de outros correspondentes de impressões digitais de código aberto. Ele oferece precisão decente e velocidade de correspondência surpreendentemente alta.

O SourceAFIS, sendo o opensource, fornece um recurso muito raro de transparência de algoritmo que expõe estruturas de dados intermediárias computadas pelo algoritmo durante a correspondência de impressões digitais, o que abre a porta para aplicativos interessantes que antes eram impossíveis com os correspondentes comerciais.

A implementação open source do algoritmo combinado com a licença permissiva pode ser explorada para o desenvolvimento de modificações customizadas interessantes no algoritmo por qualquer um com algum tempo de sobra. Alterações no algoritmo também podem ser implementadas pelo autor do SourceAFIS como um projeto de desenvolvimento customizado e acessível.

https://sourceafis.machinezoo.com/