A Git client for Android.

Related tags

Utility MGit
Overview

MGit

MGit is a Git client Android App.

This is a continuation of the SGit project.

Get it on Google Play Get it on F-Droid

Notes

Build Status

Join the chat at https://gitter.im/MGit-Android/Lobby

Translate - with Stringlate

  • If you encounter any issues (bugs, crashes, etc.) and want to help improve this project, please open an issue on GitHub describing: what the issues are; and how they were caused, to allow for re-creation and fixing of bugs.
  • This app requires minimum of for Android v5.0

Editing Files

As of version 15.7, MGit no longer provides an internal texteditor, instead if you wish to edit files, you will need to have an editor app installed.

An open source editor that has been tested to work with MGit is "Turbo Editor"

but others that support File Providers should also work.

Supported Features

  • Create local repositories
  • Clone remote repositories
  • Pull from origin
  • Delete local repositories
  • Browse files
  • Browse commit messages (short)
  • Checkout branches and tags
  • HTTP/HTTPS/SSH are supported (including SSH with private key passphrase)
  • Username/Password authentication is supported
  • Search local repositories
  • Private key management
  • Manually choose code language
  • git diff between commits
  • Import existing repositories (that is, you can copy a repository from computer and import to MGit)
  • Checkout remote branches
  • Merge branches
  • Push merged content
  • Edit file (built-in editor or external app that can edit the given file type)
  • Commit and push changed files
  • Committer information
  • Prompt for password
  • Option to save username/password
  • git status
  • Cancel when cloning
  • Add modified file to stage
  • View state of staged files (aka index)
  • git rebase
  • git cherrypick
  • git checkout <file> (reset changes of a file)

Quick start

Clone a remote repository

  1. Click on the + icon to add a new repository
  2. Enter remote URL (see URL format below)
  3. Enter local repository name - note that this is not the full path, as MGit stores all
    repositories in the same local directory (can be changed in MGit settings)
  4. Click the Clone button
  5. If required, you will be prompted for credentials to connect to the remote repo. MGit will download the repository (all branches) to your device

Create a local repository

  1. Click on the + icon to add a new repository
  2. Click on Init Local to create a local repository
  3. Enter the name for this repository when prompted
  4. A local empty repo will be created

URL format

SSH URLs

  • SSH running on standard port (22): ssh://username@server_name/path/to/repo
  • SSH running on non-standard port: ssh://username@server_name:port/path/to/repo
  • username is needed - by default, MGit tries to connect as root.

HTTP(S) URLs

  • HTTP(S) URL: https://server_name/path/to/repo

ToDo List

Future enhancements and bugs are tracked here on Github.

License

See GPLv3

All code written by [email protected] can at your option also be used under the MIT license.

Help

If you want to help improve this project, contributions, especially translations are very welcome. Also contributions to documentation via the wiki for this repo are also most welcome!

Contributing code

If you would like to contribute code, either a bugfix or a new feature, please make sure there is a open issue that addresses the new code. No Pull Requests will be merged that do not reference an existing issue in the repo.

Please use the Android Studio formatting settings set for this project in the repo.

All strings visible to the user need to go into strings resource file.

Project Goals

  • Provide the best GUI git client available on any platform
  • Be usable on both phone, tablet and laptop form-factor devices

Non-goals for the project

  • Support for proprietary vendor APIs (eg. Github)

Major Contributions

For new features, a discussion of the new functionality may need to take place in the comments on the issue covering it, so it may be best for that to occur before you spend time on writing the new code.

The app is about to have a major restructure. All new functionality in the app will be written in Kotlin/Rx per #277. Please be aware that the project is now using Data Binding Library and all future functionality should make use of it.

Submitting a Pull Request (PR)

Fork from this repo, create a new branch, commit your changes and then send a pull request against the master branch of this repo.

If you are working on a branch for some time, you may find that changes to master get merged in the meantime, if that happens please do NOT merge master into your branch! Instead rebase your branch onto the current head of master.

Comments
  • MGit clone error: creating directories on sdcard failed

    MGit clone error: creating directories on sdcard failed

    When trying to clone a repo with a root path on the external sdcard, MGit fials with the error message:

    • Creating directories on [path to git root on sdcard] failed.

    An identical clone operation with an internal memory location set to the git root path succeeds.

    Internal memory is too precious to use for repo storage.

    Android 5.1.1, Samsung Tab SM-T533

    bug wontfix 
    opened by Monte-Christo 21
  • clone a repository with private key

    clone a repository with private key

    From @alex29ua on March 15, 2014 8:10

    I have a repository access which requires a private key instead of password (password-protected key is what I have). I've added my key to SGit, but I don't see how to use it further. Is there such an option?

    Copied from original issue: sheimi/SGit#60

    enhancement 
    opened by maks 19
  • cannot open git-upload-pack

    cannot open git-upload-pack

    From @ckp5566 on October 17, 2016 3:31

    Hi I try to use "http" to git clone my git on my own server but there is an error "org.eclipse.jgit.api.errors.TransportException : cannot open git-upload-pack" the link "http://user:password@ip:port/gitdata" works well on my computer, but when I use this link on sgit on my android device, it gets an exception of "cannot open git-upload-pack".

    Any one know what's happen of this?

    Copied from original issue: sheimi/SGit#277

    more info required 
    opened by maks 15
  • RSA key with SHA-1 no longer alllowed.

    RSA key with SHA-1 no longer alllowed.

    [email protected]:username/repo_name.git:

    ERROR: You're using an RSA key with SHA-1 which is no longer allowed. Please use a newer client or a different key type.

    Please see https://github.blog/2021-09-01-improving-git-protocol-security-github for more information.

    opened by xingangshi 14
  • add play services to update openssl on >API21

    add play services to update openssl on >API21

    On older devices (pre API 21) its possible that the openssl lib shipped with the device has bugs that prevent it connecting to services like Github which have started enforcing TLSv1.2 only. Adding a dependency on Play Services allows us to easily use the more up to date OpenSSL lib shipped with Play Services. This along with PR #272 should finally fix #259

    opened by maks 14
  • Upload of created directorys on Gitea

    Upload of created directorys on Gitea

    Hi there :)

    1. I create a new directory
    2. I commit and upload
    3. Gitea shows nothing
    4. It works fine from my local Computer

    I also tried to commit content into these folders. Seems like mgit is incompatible with Gitea in this regard?

    Android 4.3 on BlackBerry 10 Current version

    more info required 
    opened by ShalokShalom 10
  • MGit Error

    MGit Error

    Downloaded 1.6.2.

    It won't let me clone a repository. It won't use the ssh key. I did have it working with a passphrase. But now it won't even ask for a username and password.

    All the app does is create the folder for the clone and then gives me a pop-up that says:

    Error occurred

    Clone failed Operation not permitted

    duplicate 
    opened by clef-shanty 9
  • Can't clone from GitHub

    Can't clone from GitHub

    Describe the bug

    I cannot clone neither a private or public repository from GitHub.

    To Reproduce

    Steps to reproduce the behavior:

    1. Go to Settings -> SSH keys -> Generate key (RSA) -> copy the public part to GitHub account (https://github.com/settings/keys)
    2. On main screen click +
    3. Provide Remote URL: [email protected]:m-radzikowski/myprivaterepo.git
    4. Click Clone
    5. Error window: Invalid remove, Clone failed

    Expected behavior

    Repo should be cloned.

    Smartphone (please complete the following information):

    • Device: Redmi Note 10
    • OS: Android 11
    • App Version: 1.5.10

    Additional context

    I cannot clone any repo - I also tried this repo with URL: [email protected]:maks/mgit.git, got the same error.

    The error does not tell much about what is actually wrong.

    I have MFA enabled on the github account, but this shouldn't matter if I use SSH URL, right?

    opened by m-radzikowski 9
  • folder can't be changed - permission issue on Android 10?

    folder can't be changed - permission issue on Android 10?

    Describe the bug

    set root folder doesn't work, nothing can't be selected. if the current selection will be saved mgit can't be used anymore and needs to be reinstalled.

    To Reproduce Steps to reproduce the behavior:

    1. Go to settings, root folder
    2. folder is "/storage/emulated0". only ".." is available
    3. Click on save
    4. previously cloned repositories are not available
    5. uninstall
    6. reinstall
    7. repositories are available again

    Expected behavior

    it should be possible to browse the folder and to select a folder

    Smartphone (please complete the following information):

    • Device: Pocophone F1
    • OS: MIUI Global 11.0.8 - Android 10
    • App Version [e.g. 1.5.3]

    Additional context

    I think this is related to changed permission system in Android 10. Requested rights are not asked.

    opened by aisbergde 9
  • Can't see local storage folders when I set the root location

    Can't see local storage folders when I set the root location

    Hi. On my Xiaomi Mi 9, when I try to set the root storage location under Settings, I can't see any folder or file in the default /storage/emulated/0 path. I can just go up in the parent folders. I double checked the app permissions and the archiving / storage access is allowed. Can you please check? Do you need more details? Thanks.

    more info required 
    opened by edomont77 9
  • Support for SSH ed25519 keys

    Support for SSH ed25519 keys

    I am trying to connect to a git server with a password protected ed25519 ssh key.

    Seems that password protected keys work since https://github.com/maks/MGit/pull/155.

    But I get following error:

    Clone failed:
    ssh://username@server/repo.git:
    invalid privatekey: SOMECHARACTERS
    

    Is ed25519 supported?

    enhancement 
    opened by bbo2adwuff 9
  • there is no rollback to a specific commit

    there is no rollback to a specific commit

    Describe the bug there is a rollback to the last commit, but not to a specific commit, as on the hit commands

    git clean -fd git reset --soft 4c78a7737d git add . git commit --amend git push -f

    To Reproduce Steps to reproduce the behavior:

    1. rolling back to the last commit

    Expected behavior allow you to roll back to the last commit, but with the changes saved. Screenshots If applicable, add screenshots to help explain your problem.

    Smartphone (please complete the following information):

    • Device: xiaomi redmi note 8 pro
    • OS: android 11
    • App Version 1.6.2

    Additional context the addition needs 2 options to leave, reset to commit with and without saving changes.

    enhancement 
    opened by saber716rus 0
  • Cannot import and use a SSH key

    Cannot import and use a SSH key

    I would like to clone to my android smartphone a private project using a private key. I hardly suceeded to import my private key to mgit I did not suceed to use this private key during mgit cloning

    To Reproduce Prerequisite : The key has been generated by git bash ssh-keygen following GitHub Docs instructions : "Generate new SSH key" https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent The public key has been depoyed in my github project

    Steps to reproduce the behavior: launch mgit on android smartphone

    1. Go to 'settings'
    2. Click on Security / SSH Keys / Manage SSH Keys
    3. Click on the Import Icon (upper right corner).

    First issue The screen enables to navigate anywhere into the file system but it is not possible to select any file. NOTE : I thing this is due to the fact that the application has only required the permission to access to "multimedia" files, and not all files - my android smartphone is running android version 11

    The only solution that I have found in order to import the key was to create a sub directory 'ssh_key" in the Audiobooks dirctory Even there I have had to add an extention ".jpg" or ".png" to my private key file in order to be able to select this file. Expected behavior While importing a key, the application should navigate only in the multimedia file space, or should display a warning explaining what are the constraint about the key import location.

    NOTE : Afterthat the key seems to be correctly imported : if I quickly click on it, I can see the public key string, if I longly click on it, I can see the private key string.

    Second issue But now I don't understand how to assign this key to the ssh session for cloning my project.

    **Smartphone

    • Device: [redmi 5g]
    • OS: [Android 11]
    • App Version [1.6.2]

    Could you please help me to manage my ssh Key Regards

    question more info required documentation 
    opened by jef-maubert 1
  • changing case of folder names in case sensitive repositories - folders are deleted in repo after committing

    changing case of folder names in case sensitive repositories - folders are deleted in repo after committing

    Describe the bug

    MGit deletes renamed directories from the repository in certain constellations, but does not delete them in the file system.

    Specifically:

    For some repositories used with Windows, as well as somewhere with Unix, and also on Android, I need case sensitivity.

    So on Windows I set something like this: git config core.ignorecase false

    And also in MGit I set this in raw config.

    Now the following happens:

    The changes from case in filenames seems to work (most time). The changes I make on Windows go into the repository. Most of the time, they also arrive in Android via MGit. But sometimes MGit then deletes the files in the repository on commit. But mostly it works, and the files are renamed in Android.

    According to which principle sometimes files are deleted and sometimes not, I have not understood.

    It is worse with directories:

    • I get the change of directory names (everything in lower case) from Windows to the repository (GitLab).
    • When I do a pull with MGit, the directories are not renamed in the Android file system. But they should be renamed so that the state in Android matches the repository.
    • If I now make any commit, MGit deletes these directories in the repository. But they remain in the Android file system. So you don't even notice that they are deleted in the repository unless you look closely at the log.
    • With the next pull on Windows, the directories with all contents are deleted, because MGit has deleted them before in the repository.

    And since the directories are still there on Android, you don't even get the idea that MGit deleted them in the repository. So you might only notice it by accident. Then you can undo the deletion in the repository. But at the latest with the next pull, commit and push with MGit they will be deleted again.

    **Expected behavior MGit should correctly process case changes in directories in case sensitive repositories:

    • case sensitivity should also be applied in android.
    • MGit should not simply delete something in the repository that is actually still there
    • What MGit shows as existing in the file system should correspond to the content of the repository.

    Smartphone (please complete the following information):

    • Device: [e.g. Pixel 3a]
    • OS: Android 12
    • MIUI Global 13.0.1
    • App Version 1.6.3 fdroid

    Additional context Add any other context about the problem here.

    opened by aisbergde 2
  • Material You theming when?

    Material You theming when?

    Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

    Describe the solution you'd like A clear and concise description of what you want to happen.

    Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

    Additional context Add any other context or screenshots about the feature request here.

    enhancement ui/ux 
    opened by PranavPurwar 3
  • Please add a function to change the local path for each repositories

    Please add a function to change the local path for each repositories

    received via private message:

    Please see my operation flow. (MGit v1.6.3)

    1. Open settings.
    2. Set "/storage/emulated/0" at "Root storage location for repos" <- I set a local path as default.
    3. Press "+" icon to clone repository.
    4. Set the following.
    • Remote URL: "[email protected]:/.git"
    • Local Path: "/storage/6662-6333/" <- I want to set only this repository to a different local path (sd card).
    1. Error Message: Repository name format error. Repository name cannot contain slashes.
    enhancement 
    opened by maks 0
  • clone not possible due to IllegalStateException

    clone not possible due to IllegalStateException

    Describe the bug After some changes fetching broke my local repo. I tried to delete and clone again which were not possible anymore (send you a mail separatly with crash report)

    To Reproduce

    1. have an repository whith following attributes: 150mb in total, 50mb biggest file on github
    2. cloning with mgit and (user + access-token as password)
    3. seeing mgit starting downloading the repository in the repository list
    4. suddenly the repo entrie dissapears and after some sconds a error message comes

    Expected behavior success message after clone

    Screenshots

    Smartphone (please complete the following information):

       "APP_VERSION_CODE":224,
       "APP_VERSION_NAME":"1.6.3",
       "BRAND":"samsung",
       "PRODUCT":"a40eea",
       "ANDROID_VERSION":"11",
    

    Additional context this is the exception i've found in the crash report i've send to you

       "STACK_TRACE":"java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState\n\tat
     androidx.fragment.app.FragmentManager.checkStateLoss(FragmentManager.java:1551)\n\tat 
    androidx.fragment.app.FragmentManager.enqueueAction(FragmentManager.java:1591)\n\tat 
    androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:341)\n\tat 
    androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:306)\n\tat 
    androidx.fragment.app.DialogFragment.show(DialogFragment.java:261)\n\tat 
    me.sheimi.android.utils.BasicFunctions.showException(BasicFunctions.java:82)\n\tat 
    me.sheimi.sgit.repo.tasks.repo.RepoOpTask.onPostExecute(RepoOpTask.java:32)\n\tat 
    me.sheimi.sgit.repo.tasks.repo.CloneTask.onPostExecute(CloneTask.java:50)\n\tat 
    me.sheimi.sgit.repo.tasks.repo.CloneTask.onPostExecute(CloneTask.java:24)\n\tat android.os.AsyncTask.finish(AsyncTask.java:771)\n\tat
     android.os.AsyncTask.access$900(AsyncTask.java:199)\n\tat 
    android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:788)\n\tat 
    android.os.Handler.dispatchMessage(Handler.java:106)\n\tat android.os.Looper.loop(Looper.java:246)\n\tat 
    android.app.ActivityThread.main(ActivityThread.java:8653)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat 
    com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)\n\tat 
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)\n",
    
    
    more info required 
    opened by hilbert-ralf 3
Releases(v1.6.3)
  • v1.6.3(May 10, 2022)

  • v1.6.2(Mar 27, 2022)

    • Add support for importing ED25519 ssh private keys, eg as required by GitHub (contributed by @kb-1000)
    • Removed crash reporting service. Crash reports can now be optionally sent via email.
    • Fix to use correct user section name (contributed by @imnotjames)
    • setting to allow forcing app to use English instead of device locale (contributed by @prattpratt)
    • String translation improvements
    Source code(tar.gz)
    Source code(zip)
  • v1.5.10(Aug 9, 2020)

  • v1.5.9(Mar 11, 2020)

  • v1.5.8(Mar 4, 2020)

  • v1.5.7(Feb 29, 2020)

    • Internal code editor removed, files now edited in external editor apps.
    • Bug fixes
    • Android 5.0 is now minimum version supported by this and future versions of MGit
    Source code(tar.gz)
    Source code(zip)
  • 1.5.6(Feb 25, 2020)

  • v1.5.5.1(Feb 26, 2019)

  • v1.5.5(Feb 24, 2019)

  • v1.5.4.7(Aug 19, 2018)

  • v1.5.4.6(Jul 11, 2018)

    Fixed bug where Branch selection button was not visible in default "light" theme Fixed bug when reseting repo (thanks @kaeptmblaubaer1000 ) Added Kotlin syntax highlighting to internal editor (thanks @rahulraopune )

    Source code(tar.gz)
    Source code(zip)
  • v1.5.4.5(Jun 18, 2018)

  • v1.5.4.4(Jun 3, 2018)

    • Improve clone UI by not using model dialog, as part of the change, begin move to use MVVM architecture
    • fix crashing bug from vector drawable usage for default avatar icon on older devices
    Source code(tar.gz)
    Source code(zip)
  • v1.5.4.3(Apr 2, 2018)

  • v1.5.4.2(Mar 19, 2018)

  • v1.5.4.1(Mar 19, 2018)

  • v1.5.4(Mar 18, 2018)

    New Features:

    • Open supported repo urls with MGit (thanks to @aldaircruz)
    • Open repo url in external app (thanks to @aldaircruz)

    Bugfixes:

    • Fix for HTTPS connections to Github failing on older versions of Android (thanks to @kaeptmblaubaer1000)
    • Fix crashing setting root folder for local repos on older version of Android
    • New/updated translations (thanks to @JAngres)
    • Code refactor/improvements, better icons (thanks to @marukami)
    • fix class cast exception in debug log (thanks to @michaelweghorn)

    Note: due to the bugfix for HTTPS connection issues with Github (TLSv1.2 only) MGit now has a dependency on Google Play on versions of Android lower than 5.0

    A big thank you to everyone who contributed to this release!

    Source code(tar.gz)
    Source code(zip)
  • v1.5.3(Jul 20, 2017)

    New features: keyboard shortcuts save username/password checkbox should default to off Improve crash handling

    Bugfixes: errors in clone not reported to user git clone fails due to wrong root dir path on after initial install bug the App can't find the old repositories when changing the default storage path bug fixed username is Ignored when Logging in via SSH bug

    Source code(tar.gz)
    Source code(zip)
  • v1.5.2(May 12, 2017)

  • v1.5.1(Apr 22, 2017)

Owner
Maksim Lin
Android Developer, Flutter Developer & GDE
Maksim Lin
Bar Service Kotlin Client

A simple starter service client written in Kotlin against generated models (protos)A simple starter service client written in Kotlin against generated models (protos)

Logesh Dinakaran 0 Nov 9, 2021
POC Simulate Backend Biometric Authentication with AIDL (client app/server app)

poc-simulate-bio-auth-aidl POC Simulate Backend Biometric Authentication with AIDL (client app/server app) #How to use Install server app and run Inst

gundamD 0 Dec 30, 2021
DEMOMovieDB - Client App using movieDB with Kotlin

DEMOMovieDB DEMOMovieDB is a gorgeous client application for TMDb on Android, bu

null 0 Feb 15, 2022
Android Shared preference wrapper than encrypts the values of Shared Preferences. It's not bullet proof security but rather a quick win for incrementally making your android app more secure.

Secure-preferences - Deprecated Please use EncryptedSharedPreferences from androidx.security in preferenced to secure-preference. (There are no active

Scott Alexander-Bown 1.5k Dec 24, 2022
Android library which makes it easy to handle the different obstacles while calling an API (Web Service) in Android App.

API Calling Flow API Calling Flow is a Android library which can help you to simplify handling different conditions while calling an API (Web Service)

Rohit Surwase 19 Nov 9, 2021
Gesture detector framework for multitouch handling on Android, based on Android's ScaleGestureDetector

Android Gesture Detectors Framework Introduction Since I was amazed Android has a ScaleGestureDetector since API level 8 but (still) no such thing as

null 1.1k Nov 30, 2022
Use Android as Rubber Ducky against another Android device

Use Android as Rubber Ducky against another Android device

null 1.4k Jan 9, 2023
Android Utilities Library build in kotlin Provide user 100 of pre defined method to create advanced native android app.

Android Utilities Library build in kotlin Provide user 100 of pre defined method to create advanced native android app.

Shahid Iqbal 4 Nov 29, 2022
A util for setting status bar style on Android App.

StatusBarUtil A util for setting status bar style on Android App. It can work above API 19(KitKat 4.4). 中文版点我 Sample Download StatusBarUtil-Demo Chang

Jaeger 8.8k Jan 6, 2023
A logger with a small, extensible API which provides utility on top of Android's normal Log class.

This is a logger with a small, extensible API which provides utility on top of Android's normal Log class. I copy this class into all the little apps

Jake Wharton 9.8k Dec 30, 2022
Java implementation of a Disk-based LRU cache which specifically targets Android compatibility.

Disk LRU Cache A cache that uses a bounded amount of space on a filesystem. Each cache entry has a string key and a fixed number of values. Each key m

Jake Wharton 5.7k Dec 31, 2022
a simple cache for android and java

ASimpleCache ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架。轻量到只有一个java文件(由十几个类精简而来)。 1、它可以缓存什么东西? 普通的字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的java对象,和 b

Michael Yang 3.7k Dec 14, 2022
gRPC and protocol buffers for Android, Kotlin, and Java.

Wire “A man got to have a code!” - Omar Little See the project website for documentation and APIs. As our teams and programs grow, the variety and vol

Square 3.9k Dec 31, 2022
✔️ Secure, simple key-value storage for Android

Hawk 2.0 Secure, simple key-value storage for android Important Note This version has no backward compatibility with Hawk 1+ versions. If you still wa

Orhan Obut 3.9k Dec 20, 2022
A robust native library loader for Android.

ReLinker A robust native library loader for Android. More information can be found in our blog post Min SDK: 9 JavaDoc Overview The Android PackageMan

Keepsafe 2.9k Dec 27, 2022
A lightning fast, transactional, file-based FIFO for Android and Java.

Tape by Square, Inc. Tape is a collection of queue-related classes for Android and Java. QueueFile is a lightning-fast, transactional, file-based FIFO

Square 2.4k Dec 30, 2022
Joda-Time library with Android specialization

joda-time-android This library is a version of Joda-Time built with Android in mind. Why Joda-Time? Android has built-in date and time handling - why

Daniel Lew 2.6k Dec 9, 2022
a SharedPreferences replacement for Android with multiprocess support

DEPRECATED - no longer actively maintained Tray - a SharedPreferences replacement for Android If you have read the documentation of the SharedPreferen

HCI @ gcx 2.3k Nov 17, 2022
OpenKeychain is an OpenPGP implementation for Android.

OpenKeychain (for Android) OpenKeychain is an OpenPGP implementation for Android. For a more detailed description and installation instructions go to

OpenKeychain 1.8k Jan 3, 2023