Skip to content

v3.0.0 — O celular deixa de ser a versão reduzida

Choose a tag to compare

@github-actions github-actions released this 21 Jul 15:43
· 11 commits to main since this release

O celular deixa de ser a versão reduzida.

Desde a 2.0.0 o app ganhou português, wikilinks que funcionam, busca com operadores, diagnóstico do vault, backup, cache do índice e blocos query. Esta versão fecha as três últimas peças — e com elas o Android faz praticamente tudo que o desktop faz, tirando o que só existe num computador.


🃏 Import de baralho do Anki, direto no celular

⋮ da gaveta → Importar do Anki. Sem Anki Desktop, sem passo intermediário.

E sem dependência nenhuma: a coleção dentro de um .apkg é SQLite puro, e o Android já tem SQLite. A versão desktop precisou trazer o SQLite compilado para WebAssembly para fazer o mesmo trabalho.

  • Notas cloze viram cartões de lacuna; tags A::B viram #A/B.
  • Cloze é detectado pelo texto, não pela tabela de tipo de nota — cujo formato mudou entre versões do Anki. E como nota cloze não tem campo de resposta, exigir uma jogava todas fora em silêncio. Esse bug já aconteceu no desktop; não valia a pena ter duas vezes.
  • Baralho grande vira uma pasta, 100 cartões por nota: uma nota com milhares de cartões leva segundos para abrir; com cem, é instantânea.
  • Ele pergunta antes de escrever qualquer coisa no vault.

Uma limitação, dita com todas as letras: o Anki 2.1.50+ comprime a coleção com zstd, que o Android não tem. Em vez de engordar o APK com uma biblioteca nativa só por isso, um pacote nesse formato é recusado com a instrução exata: no Anki, exporte de novo marcando "Suportar versões antigas do Anki". Instrução precisa vale mais que falha misteriosa.

Mídia não entra por aqui. Os arquivos ficam no pacote com nomes numéricos, e uma referência quebrada no meio do cartão é pior que nada. Se o baralho tem imagens, importe no desktop — o vault é o mesmo.

📊 Estatísticas de revisão

⋮ da gaveta → Estatísticas. Retenção, facilidade média, e a previsão dos próximos 14 dias desenhada como barras.

Sem biblioteca de gráficos: são catorze números, e a forma da fila é a mensagem inteira — uma parede no primeiro dia se lê igual em qualquer resolução. Tudo que está atrasado cai nesse primeiro dia, porque é ali que está.

Um vault sem nada revisado mostra retenção 0, que é a resposta honesta — não uma divisão por zero vestida de 100%.

📖 Leitor de EPUB

Abra um .epub do vault e ele lê, com sumário e zoom, um capítulo por vez.

Também sem biblioteca de leitor: um .epub é um ZIP com um manifesto XML, e o WebView já renderiza o resto. Trazer um leitor inteiro adicionaria uma dependência e os bugs dela; o que é genuinamente chato é achar a ordem de leitura, e essa parte está coberta por testes.

Um capítulo por vez é de propósito: um livro-texto tem dezenas de MB de XHTML, e um celular que precisa segurar tudo para mostrar a primeira página não mostra nada. As imagens do capítulo entram embutidas, porque o WebView roda sem acesso a arquivo e sem rede — um livro é conteúdo não confiável como qualquer outro download.


🧪 Por baixo

153 testes, rodando no CI antes de cada APK. O projeto não tinha nenhum há duas semanas.

Um deles pegou um erro que eu não teria visto de outro jeito: em JavaScript, dois cifrões numa substituição viram um cifrão literal; em Kotlin o cifrão começa uma referência de grupo. A mesma linha portada literalmente do desktop produzia outra coisa na matemática dos cartões do Anki.

📥 Instalação

Assinado com a mesma chave desde a 1.x, então instala por cima sem desinstalar nada e sem perder configurações. Android 9 ou mais novo.