A semi-official port of the open source Anki spaced repetition flashcard system to Android

Last update: May 18, 2022

release build Open Collective backers and sponsors commit-activity forks stars contributors license

AnkiDroid

A semi-official port of the open source Anki spaced repetition flashcard system to Android. Memorize anything with AnkiDroid!

Features

  • night mode
  • whiteboard
  • progress widget
  • detailed statistics
  • syncing with AnkiWeb
  • write answers (optional)
  • text-to-speech integration
  • more than 6000 premade decks
  • spaced repetition (supermemo 2 algorithm)
  • supported contents: text, images, sounds, MathJax
  • add cards by intent from other applications like dictionaries

Install

Wiki

View Wiki

Help

Check the user manual and the wiki for usage instructions. See the help page for how to submit a bug report or contact a project member, etc.

Contribute

You can contribute to AnkiDroid by beta testing, translating, or submitting code. See the contribution wiki page for more info.

Join Us On

Credits

Github Contributors

Thanks to these awesome contributors who keep this project going

Sponsors

Backers

Thank you to all our backers! 🙏

Contributors

Our Awesome Team of Contributors

License

GPL-3.0 License
AGPL-3.0 Licence for some part of the back-end

GitHub

https://github.com/ankidroid/Anki-Android
Comments
  • 1. Some Android 2.3.x devices can't sync

    Originally reported on Google Code with ID 372

    What steps will reproduce the problem?
    1. Open my deck in Anki or Ankidroid
    2. Sync it (the first time its working)
    3. do some reviews
    4. do a Sync in Ankidroid -> Error
    
    What is the expected output? What do you see instead?
    A message that sync was not succesfull.
    
    What version of AnkiDroid are you using? On what version of Android?
    0.5 beta 20
    
    Please provide any additional information below.
    
    

    Reported by TAFKAAZ on 2011-02-01 15:30:58


    - _Attachment: [Sauseschritt1.anki](https://storage.googleapis.com/google-code-attachments/ankidroid/issue-372/comment-0/Sauseschritt1.anki)_
    Reviewed by hssm at 2015-07-28 07:20
  • 2. Pictures not displayed

    Originally reported on Google Code with ID 121

    This seems like a major problem but I couldn't find anything in searching.
    
    On AnkiDroid I can use the flashcards fine but the pictures won't load in the flashcards.
    The pictures load find on the flashcards on the desktop application. 
    I have the .media folder and the .anki file in the same folder that is the pathway
    for the AnkiDroid application. 
    The image files are .png
    
    Thanks for any help, I just started using Anki and this is a major setback.
    

    Reported by jbh212 on 2010-07-01 17:34:32

    Reviewed by hssm at 2015-07-28 06:49
  • 3. Reimplement CardTemplateEditor with in-memory edits

    Purpose / Description

    Issue #5011 was especially thorny because to solve it properly meant to alter the way it handled storage by changing it from speculative persistence of edits to persistence of edits only when the user confirmed it.

    Previous work altered related code (Previewer, some libanki APIs) to handle working with unsaved data, as well as tracking changes to it, and now it all comes together in this PR

    As mentioned in the commit, it does not implement undo. I've done undo in #5113 so I know how, but this PR is already huge, and I believe this PR is still 100% of the feature profile of the previous code so it's not a regression.

    This is based on #5150 (which itself chained to #5149 and #5148) so the commit list will whittle down as those are reviewed and merged, or this can go at once.

    Fixes

    Fixes #5011, #5600

    How Has This Been Tested?

    The automated testing is extremely thorough - 90% or higher for the new code - because this is a complicated Activity, and very important. I've also clicked around a bunch in an API28 emulator

    Further work should include undo, maybe making the "don't orphan notes on template remove" check async, and investigating whether the pager fragment invalidation workaround is still necessary.

    Reviewed by mikehardy at 2018-12-06 03:28
  • 4. Improved adaptive icon proposal

    I haven't been too happy with the way the Icon looks right now, compared to other apps.

    1 anki-old_small

    Part of the problem is that the shape that's supposed to represent a flashcard requires an additional background, which is a neutral white right now. So I took the previous SVG, cleaned it up (SVGs generated by Illustrator are quite the mess) and turned it into a square version without the shape, but maintaining all other elements exactly the way they were.

    anki svg

    As an adaptive icon, it looks like this.

    2 anki-new_small

    Because I thought some people would dislike the cut-off star, I reduced the star size and moved it a bit.

    3 anki-star_small

    That's fine, but unfortunately the square version, which would still be visible in many launchers and possibly Google Play, doesn't look as attractive anymore in my opinion, because the star seems too small now.

    anki_star svg

    The people I've asked so far actually seemed to prefer the first (unmodified) version with the cut-off star, because it makes the whole thing a bit more visually interesting and dynamic.

    What do you think, does something like this have a chance of getting merged?

    Reviewed by martindisch at 2018-11-09 09:03
  • 5. Contentprovider

    This is a pull request for a content provider as discussed here: https://groups.google.com/forum/#!msg/anki-android/SitMpj7J6fw/swqcuJKcld8J

    It currently supports getting the unprocessed data from the Anki DB using the following URI: content://com.ichi2.anki.flashcard/flashcards

    and fields and cards/decks using

    content://com.ichi2.anki.flashcard/flashcards/<note_id>/data

    The contract is described in FlashCardsContract.java. I release this file into the public domain so that it can be used by any third party software without any attribution or royalty. I.e. this file (and this file only) is not licensed under GPL.

    The content provider currently only supports notes/cards, but not models.

    It also only supports the query() function, no insert() or update() yet.

    For update() on fields I intended to use the same mechanism as NoteEditor, but there is some kind of check that prevents updates from any other Thread than the main thread.

    The first intention of this PR is to discuss if the proposed data structure is acceptable/understandable for the AnkiDroid developers and to discuss implementation details such as the above (concerning the main thread problem). Of course, I hope that it will later merged into the main branch.

    Reviewed by federvieh at 2015-02-03 07:27
  • 6. V2.13: Answer buttons not appearing in Reviewer

    Reproduction Steps
    1. Select deck to review
    2. Question page is nearly blank (only note and "show answer" button)
    3. Right answer page is also blank

    See pictures: Screenshot_20201008-142047_AnkiDroid Screenshot_20201008-142059_AnkiDroid

    Expected Result

    Question and answer page should be as usual, with the buttons there.

    Debug info

    AnkiDroid Version = 2.13.5

    Android Version = 8.0.0

    ACRA UUID = 80fce863-4876-45bc-9e26-1b657faa1f28

    Scheduler = std

    Research

    Enter an [x] character to confirm the points below:

    • [x] I have read the support page and am reporting a bug or enhancement request specific to AnkiDroid
    • [x] I have checked the manual and the FAQ and could not find a solution to my issue
    • [x] I have searched for similar existing issues here and on the user forum
    • [ ] (Optional) I have confirmed the issue is not resolved in the latest alpha release (instructions)
    Reviewed by benjaminor at 2020-10-08 12:25
  • 7. Added support for bulk insert of Notes: 2000% faster

    This is a major performance improvement for inserting large numbers (hundreds or thousands) of Notes.

    Added support for bulkInsert() to the content provider as well as the API (addNewNotes). This will work with existing provider but new provider implementation is much faster.

    Added support for inserting a new note into a deck with one provider call (instead of three in existing API implementation) to the provider's insert() method. Again, this will work with existing provider, but new provider implementation is about 39% faster.

    Added API support for updating an existing note: updateNote() and updateNoteTags(). (This is already supported by existing provider).

    Added API support for counting number of notes (with a certain model id) in a deck: countNotes(). I couldn't see a way to count notes in a deck while ignoring model id. (This is already supported by existing provider).

    Added provider support for "count(*)" column in projection.

    Added a meta-data key to the provider (in manifest) so that the API can query whether the provider supports these new features.

    Here are the stats from my testing on a Nexus 6P (6.0.1):

    Insert 2122 notes (same model (three fields), same deck, single card)

    Ankidroid v.20600116 (3 provider calls per note): 191secs Rewrote as single provider call per note: 138secs Rewrote as single provider call in total (bulk insert): 119secs

    This PR: single provider call in total (bulk insert, single transaction): Ignore duplicates (empty deck): 44secs Ignore duplicates (deck already contains 2122 notes, so none added): 34secs No duplicate check (empty deck): 8.5secs

    Reviewed by marcardar at 2016-03-02 04:43
  • 8. Some Latex expressions don't show up

    Originally reported on Google Code with ID 1368

    From forum:
    I have been having the exact same problem! Certain LaTeX expressions work, but other
    ones seem to fail, showing a blue box with a question mark in it (image not found icon).
    You can delete the card, deck, etc, but when you use the same expression, it still
    fails the same. The generated image is in the sd card as it should be, and everything
    is working properly on the desktop client (rc3).
    
    I note that although the below expression fails consistently, I believe I have seen
    others fail on occasion, but they appear to work now after deleting, syncing, etc.
    
    For me, it's failing on this expression:
    [$$]E_{n} = E_{total} \frac{R_{n}}{R_{total}}[/$$]
    
    Another user reported
    I'll list a few of the expressions along with their generated filenames.
    [$]A[/$] - latex-019e9892786e493964e145e7c5cf7b700314e53b.png
    [$$]\frac{A_1 e^{i\varphi_1}}{A_2 e^{i\varphi_2}}[/$$] - latex-02a0f03e6aeaef7135939dfd4f5d68dd8b34e10e.png
    [$$]\left|z\right|^2[/$$] - latex-0319612c4826fbf52f897651920a083b0355aa31.png
    

    Reported by inigo.aldana on 2012-09-10 14:26:44

    Reviewed by hssm at 2015-07-28 09:14
  • 9. Showing answer card suddenly lags some seconds

    Reproduction Steps
    1. download deck: https://ankiweb.net/shared/info/211246396, the "Japanese Core Vocab" deck
    2. Click 'show answer'
    3. Observe

    Note: it never lagged up until yesterday. No font changes, or deck size changes.

    Expected Result

    instant answer

    Actual Result

    ~300ms estimated lag

    • answer page loads ~ 300ms estimated lag
    • answer loads ~300ms estimaed lag
    • question (above answer) and example sentences (below answer) load
    Debug info

    AnkiDroid Version = 2.8.4

    Android Version = 6.0.1

    ACRA UUID = 62f5b6ab-39e7-42d7-8092-8a460f5d0995

    Research

    Enter an [ x ] character to confirm the points below:

    [ x ] I have read the support page and am reporting a bug or enhancement request specific to AnkiDroid

    [ x ] I have checked the manual and the FAQ and could not find a solution to my issue

    [ x ] I have searched for similar existing issues here and on the user forum

    Reviewed by PieterVanB at 2019-01-31 19:27
  • 10. StackOverflow Free Advertising Designs (2020)

    StackExchange has a free vote-based advertising program for Open Source projects.

    We used to be involved: https://github.com/ankidroid/Anki-Android/tree/master/docs/marketing/stackexchange-ads and we should get involved again: https://meta.stackoverflow.com/questions/394409/open-source-advertising-1h-2020

    Requirements

    Ad Requirements

    It must be an advertisement soliciting the participation and contribution of programmers writing actual source code. This is not intended as a general purpose ad for consumer products which just happen to be open source. It's for finding programmers who will help contribute code or other programmery things (documentation, code review, bug fixes, etc.).

    Your ad should be an original creation which has not previously appeared on Stack Overflow. Please do not resubmit entries that have appeared as ads on Stack Overflow in previous periods.

    In order to work, the answers you post to this question must conform to the following rules.

    Image requirements

    • The image that you create must be 300 pixels by 250 pixels, or twice that if high DPI.
    • Must be hosted through our standard image uploader (imgur)
    • Must be GIF or PNG
    • No animated GIFs
    • Absolute limit on file size of 150 KB
    • Must have a 1px border if (part of) the background is white, 2px if the image is high DPI.

    The output, which ultimately will be served in an ad slot on Stack Overflow, can be previewed by clicking through to this URL:

    https://stackoverflow.com/ossads/300x250

    I believe that we'll need to ask the authors to release the images under the GNU General Public License, so they can be distributed with the project.

    It'd be useful to get a few prospect ads, one for this half of the year, and ideally a backlog so we can register as soon as the next one is out.

    Reviewed by david-allison at 2020-05-27 19:20
  • 11. Negative Review time

    Originally reported on Google Code with ID 1449

    I copied my ankidroid data to my desktop and its showing studied 417 cards in -596 hours
    
    Using ankidroid 2 beta 19 on samsung galaxy s 2.3.5
    

    Reported by otaku.hari on 2012-10-27 14:04:32

    Reviewed by hssm at 2015-07-28 09:24
  • 12. Fixed the bug that filtered study decks don't show in Card browser

    Purpose / Description

    Filtered study decks don't show in the card browser's deck search dialog.

    Fixes

    Fixes #10684

    Approach

    The problem is caused by the displayDeckSelectionDialog function. In this function, only non-dynamic decks will be displayed in the dialog. I changed the filter requirements to display all the decks in the card browser's deck search dialog. This function is called by setSpinnerListener and onKeyUp in com/ichi2/anki/NoteEditor.kt. I create another two functions setSpinnerListenerForNoteEditor and displayDeckSelectionDialogForNoteEditor, so the behavior of the deck search dialog in the card browser is fixed and the behavior in the note editor screen is not affected.

    How Has This Been Tested?

    It was manually tested on the emulator (Pixel 2 API 29). The deck search dialog in the card browser screen: image

    The deck search dialog in the note editor screen: image

    Checklist

    Please, go through these checks before submitting the PR.

    • [x] You have not changed whitespace unnecessarily (it makes diffs hard to read)
    • [x] You have a descriptive commit message with a short title (first line, max 50 chars).
    • [x] Your code follows the style of the project (e.g. never omit braces in if statements)
    • [x] You have commented your code, particularly in hard-to-understand areas
    • [x] You have performed a self-review of your own code
    • [x] UI changes: include screenshots of all affected screens (in particular showing any new or changed strings)
    • [ ] UI Changes: You have tested your change using the Google Accessibility Scanner
    Reviewed by MrPenguins at 2022-05-21 11:42
  • 13. Cleanup for RemoteMediaServer

    Purpose / Description

    This PR fixes all issues reported by the IDE and also the @KotlinCleanup for the file. Also improves the nullability in the class constructor.

    How Has This Been Tested?

    Ran the usual tests.

    Checklist

    • [x] You have not changed whitespace unnecessarily (it makes diffs hard to read)
    • [x] You have a descriptive commit message with a short title (first line, max 50 chars).
    • [x] Your code follows the style of the project (e.g. never omit braces in if statements)
    • [x] You have commented your code, particularly in hard-to-understand areas
    • [x] You have performed a self-review of your own code
    • [ ] UI changes: include screenshots of all affected screens (in particular showing any new or changed strings)
    • [ ] UI Changes: You have tested your change using the Google Accessibility Scanner
    Reviewed by lukstbit at 2022-05-21 08:55
  • 14. [Kotlin Cleanup] DeckPickerCheckDatabaseListenerTest

    Checklist

    • [x] You have not changed whitespace unnecessarily (it makes diffs hard to read)
    • [x] You have a descriptive commit message with a short title (first line, max 50 chars).
    • [x] Your code follows the style of the project (e.g. never omit braces in if statements)
    • [x] You have commented on your code, particularly in hard-to-understand areas
    • [x] You have performed a self-review of your own code
    • [ ] UI changes: include screenshots of all affected screens (in particular showing any new or changed strings)
    • [ ] UI Changes: You have tested your change using the Google Accessibility Scanner
    Reviewed by n1snt at 2022-05-21 07:45
  • 15. Cleanup for file RemoteServer.kt

    Purpose / Description

    This PR improves the nullability for the RemoteServer class and also fixes all IDE lint issues in the file.

    How Has This Been Tested?

    Ran the usual tests.

    Checklist

    • [x] You have not changed whitespace unnecessarily (it makes diffs hard to read)
    • [x] You have a descriptive commit message with a short title (first line, max 50 chars).
    • [x] Your code follows the style of the project (e.g. never omit braces in if statements)
    • [x] You have commented your code, particularly in hard-to-understand areas
    • [x] You have performed a self-review of your own code
    • [ ] UI changes: include screenshots of all affected screens (in particular showing any new or changed strings)
    • [ ] UI Changes: You have tested your change using the Google Accessibility Scanner
    Reviewed by lukstbit at 2022-05-21 07:40
  • 16. Refactor to use Collection parameter in onCollectionLoaded callback

    Purpose / Description

    To improve type safety this PR refactors code in the onCollectionLoaded() callbacks to use the non null Collection received as a parameter instead of the getCol() method call from the super class which can be nullable. There's a also a !! addition which is safe because the method where it happens it's called from onCollectionLoaded() where we know that the Collection is valid.

    How Has This Been Tested?

    Ran the usual tests.

    Checklist

    • [x] You have not changed whitespace unnecessarily (it makes diffs hard to read)
    • [x] You have a descriptive commit message with a short title (first line, max 50 chars).
    • [x] Your code follows the style of the project (e.g. never omit braces in if statements)
    • [x] You have commented your code, particularly in hard-to-understand areas
    • [x] You have performed a self-review of your own code
    • [ ] UI changes: include screenshots of all affected screens (in particular showing any new or changed strings)
    • [ ] UI Changes: You have tested your change using the Google Accessibility Scanner
    Reviewed by lukstbit at 2022-05-20 13:37
  • 17. [Bug] Flag color or Mark in Reviewer isn't updated if changed in CardBrowser

    Reproduction Steps
    1. Start reviewing a card
    2. Open Drawer
    3. Select Card Browser
    4. Change the flag of the card that you were reviewing in step 1 (Issue also exists for Marking/Unmarking the card)
    5. Go back to reviewer (By pressing back)
    Expected Result

    The card in the reviewer is not updated

    Actual Result

    The card in the reviewer is updated

    Debug info
    AnkiDroid Version = 2.16alpha65
    
    Android Version = 11
    
    Manufacturer = unknown
    
    Model = Android SDK built for x86
    
    Hardware = ranchu
    
    Webview User Agent = Mozilla/5.0 (Linux; Android 11; Android SDK built for x86 Build/RSR1.210210.001.A1; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36
    
    ACRA UUID = d8820739-7e9b-4fce-a8c2-4f44d5bda21e
    
    Scheduler = std2
    
    Crash Reports Enabled = false
    
    DatabaseV2 Enabled = true
    
    
    Reviewed by dorrin-sot at 2022-05-20 13:16
Ankiconnect Android allows you to utilize the standard Anki mining workflow on Android devices like phones and eReaders

Ankiconnect Android Ankiconnect Android allows you to utilize the standard Anki mining workflow on Android devices like phones and eReaders. Create An

May 1, 2022
Will export all your words from LingQ to a tab-separated UTF-8 text file, Html, and Anki

LingQWordsExport Will export all your words from LingQ to a tab-separated UTF-8 text file, Html, and Anki. Here you can find a documentation page. Ins

Apr 21, 2022
Freegemas libGDX is an Android and Java desktop port of Freegemas, which in turn is an open source version of the well known Bejeweled.
Freegemas libGDX is an Android and Java desktop port of Freegemas, which in turn is an open source version of the well known Bejeweled.

freegemas-gdx Freegemas libGDX is an Android, HTML 5 and Java desktop port of Freegemas, which in turn is an open source version of the well known Bej

Feb 13, 2022
Freegemas libGDX is an Android and Java desktop port of Freegemas, which in turn is an open source version of the well known Bejeweled.
Freegemas libGDX is an Android and Java desktop port of Freegemas, which in turn is an open source version of the well known Bejeweled.

freegemas-gdx Freegemas libGDX is an Android, HTML 5 and Java desktop port of Freegemas, which in turn is an open source version of the well known Bej

Feb 13, 2022
The android port of the 2048 game (for offline playing)
The android port of the 2048 game (for offline playing)

2048-android This is the Android port of the 2048 game made by Gabriele Cirulli https://github.com/gabrielecirulli/2048 It's nothing fancy; just a Web

May 12, 2022
Android port of Simon Tatham's Puzzles. *git replace in use* - you might want to {{ git fetch origin 'refs/replace/*:refs/replace/*' }}

This is the README accompanying the source code to Simon Tatham's puzzle collection. The collection's web site is at <https://www.chiark.greenend.org.

May 11, 2022
Pw0 Framewrok - magical android pentest app 🔮! Pixie Dust, Handshakes, Deauth, Nmap, Port scanner and more!

Pw0 Framework Pw0 Framewrok - magical android pentest app ?? ! Features: Pixie Dust Handshakes Deauth Nmap Port scanner and more! Version: 0.2 Beta Au

Sep 27, 2021
Pw0 Framewrok - magical android pentest app 🔮! Pixie Dust, Handshakes, Deauth, Nmap, Port scanner and more!

Pw0 Framework Pw0 Framewrok - magical android pentest app ?? ! Features: Pixie Dust Handshakes Deauth Nmap Port scanner and more! Version: 0.2 Beta Au

Sep 27, 2021
This application is android port to desktop applicaton Scrcpy.

scrcpy-android This application is android port to desktop applicaton Scrcpy. This application mirrors display and touch controls from a remote androi

May 17, 2022
GitHub client for Android based on the abandoned official app
GitHub client for Android based on the abandoned official app

ForkHub ForkHub started off as a fork of the official Android app from GitHub, and has since seen lots of improvements. You can see a comprehensive li

May 13, 2022
An unofficial Zerotier Android client patched from official client
An unofficial Zerotier Android client patched from official client

An unofficial Zerotier Android client patched from official client

May 20, 2022
The official repo for Blokada for Android and iOS.

Blokada 5 Blokada 5 is the next generation of the well known open source mobile ad blocker and privacy app. Want to try it out? Click here to download

May 16, 2022
Official Tehro client for Android.
Official Tehro client for Android.

Tehro Tehro is a public transport guide Android application powered by Kotlin & Jetpack Compose. Database The database used in the app is stored at te

May 10, 2022
Mobile client for official Nextcloud News App written as Kotlin Multiplatform Project
Mobile client for official Nextcloud News App written as Kotlin Multiplatform Project

Newsout Android and iOS mobile client for Nextcloud news App. The Android client is already available to download in the Play Store. F-Droid and Apple

Apr 12, 2022
Learn about your favorite Marvel characters, super heroes, villains and watch videos from official Marvel youtube channel.
Learn about your favorite Marvel characters, super heroes, villains and watch videos from official Marvel youtube channel.

Marvel Super Heroes Android App ?? Learn about your favorite Marvel characters, super heroes, villains and watch videos from official Marvel youtube c

Feb 20, 2022
Ride-Sharing Uber Lyft Android App - Learn to build a ride-sharing Android Taxi Clone App like Uber, Lyft - Open-Source Project By MindOrks
Ride-Sharing Uber Lyft Android App - Learn to build a ride-sharing Android Taxi Clone App like Uber, Lyft - Open-Source Project By MindOrks

Ride-Sharing Uber Lyft Android App - Learn to build a ride-sharing Android Taxi Clone App like Uber, Lyft - Open-Source Project By MindOrks

May 21, 2022
An Open-Source repository that contains all the Android Dev and Kotlin concepts and several projects on android ranging in difficulty making this repo completely beginner-friendly.
An Open-Source repository that contains all the Android Dev and Kotlin concepts and several projects on android ranging in difficulty making this repo completely beginner-friendly.

An Open-Source repository that contains all the Android Dev and Kotlin concepts and several projects on android ranging in difficulty making this repo completely beginner-friendly. The main aim of this repository is to help students who are learning Android Development or preparing for an Android Developer role-based job.

Mar 9, 2022
Open-source modular Android App IDE for Android
Open-source modular Android App IDE for Android

Blokkok Blokkok is an open-source modular Android App IDE for Android. Every components of the IDE are separated from each other by modules, every mod

May 9, 2022
An open source Hacker News client for Android.
An open source Hacker News client for Android.

Hacker News Come chat with us on Gitter.im! An open source Hacker News client for Android phones & tablets. Available on the Google Play Store How to

Apr 14, 2022