you get a kanji or word every day with the reading in kana, the meaning and an example sentence. keep it, toss it or reroll it. the ones you keep turn into a deck you study with spaced repetition
made it cuz i kept forgeting to study and i look at my phone like 200 times a day anyway
no accounts, no ads, no tracking. sync is optional and goes to your own google drive
grab the apk from releases, or build it yourself:
git clone https://github.com/Jideeh1/KanjiLock.git
open the folder in android studio, let it sync, hit run. needs android 8.0 or newer
the apk from releases checks github when it opens and asks before updating, u can turn that off in settings
google drive sync
google wants every app that touches drive to be registered first. you only do this once
- make a project at console.cloud.google.com and turn on the Google Drive API
- set up the OAuth consent screen (External) with the
drive.filescope - create an Android OAuth client with package
com.jideeh.kanjilockand the SHA-1 of your signing key - in the app go to Settings, Google Drive, Link
the app can only see the one file it makes, KanjiLock/kanjilock-data.json. it pulls when you open the app and pushes when you leave. two phones that both changed stuff get merged so nothing is lost
accepted list format
saved as csv so it imports straight into kotoba and other quiz apps
Questions,Answers,Comment,Instructions,Render as
花火,はなび,fireworks,Type the reading!,Image
theres also an anki export (tab seperated) and a real .apkg deck, both go into a deck called KanjiLock
project layout
kept on purpose to a few files so new features go into whats already there
app/src/main/java/com/jideeh/kanjilock/
Data.kt words, storage, srs, romaji, dictionary, imports, backup
Engine.kt daily word, study queue, alarms, widgets, reminders, ankidroid, drive
Ui.kt activity, theme, shared components, icons
Screens.kt today, study, words, settings
tools/build_dict.py builds the dictionary database
./gradlew testDebugUnitTest runs the tests
releasing an update
the app looks at the latest github release and grabs the first .apk attached to it
- bump
versionNameandversionCodeinapp/build.gradle.kts - build the
githubReleasevariant, signed with the same key every time or android wont install it over the old one - make a release with a tag like
v1.1.0and attach the apk
for the play store build playRelease instead, it has no updater since play dosent allow that
updating the dictionary
do this before each release, the edrdg licence wants the data kept up to date
- get the latest
jmdict-examples-engandkanjidic2-enjson from jmdict-simplified - run
python3 tools/build_dict.pyin the folder with the json files gzip -9 dict.dband replaceapp/src/main/assets/dict.db.gz- bump
VERSIONin the Dictionary object inData.kt
| source | license | |
|---|---|---|
| words | JMdict by the EDRDG | CC BY-SA 4.0 |
| kanji | KANJIDIC2 by the EDRDG | CC BY-SA 4.0 |
| sentences | Tatoeba | CC BY 2.0 FR |
| json data | jmdict-simplified | CC BY-SA 4.0 |
| font | Inter | OFL 1.1 |
the dictionary was condensed into a small sqlite db for the app, it stays under CC BY-SA
MIT license · privacy policy · third party notices
not affiliated with Anki, AnkiDroid, Kotoba, Google or Samsung


