Skip to content
Mycelium Bitcoin Wallet for Android
Java Kotlin Other
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
LVL removed obsolete code and documented security considerations Jun 5, 2019
backuputil upgraded gradle and gradle plugin May 21, 2019
bitlib firebase_analytics_collection_deactivated Jul 5, 2019
btchip gradle, gradle-tools and other minor upgrades Feb 20, 2019
coinapult fixed indentation and minor issues May 10, 2019
docs Update docs/multi-currency.md May 20, 2019
gradle/wrapper upgraded gradle and gradle plugin May 21, 2019
libs gradle, gradle-tools and other minor upgrades Feb 20, 2019
lt-api Merge changes from multi-currency-spl Jan 21, 2019
mbw Merge pull request #1251 from mycelium-com/release3000019 Aug 13, 2019
mbwlib Merge branch 'develop' into dev2mcs Jun 13, 2019
trezor Fix Trezor with passphrase issues Jun 14, 2019
view more RTL fixes Jul 31, 2019
wallet-android-modularization-tools @ 2497c7d fixed accidental submodule change Apr 29, 2019
wallet-console library upgrades and minor changes Jun 19, 2019
walletcore removed some obsolete comments Aug 8, 2019
walletmodel Merge pull request #1130 from mycelium-com/mcs_uncommentTxQueueing Jun 21, 2019
wapi Revert Connection manager fix and add prodnet endpoint Jul 4, 2019
.gitignore Fixed gitignore Nov 16, 2018
.gitlab-ci.yml keep artifacts on failure Jul 9, 2017
.gitmodules Remove bitcoincashj from project #2036 Apr 18, 2019
Dockerfile Merge changes from multi-currency-spl Jan 21, 2019
LICENSE v2.1.0 - BETA1 Nov 21, 2014
README.md removing references to modulespvbch Apr 22, 2019
apkdiff.py fixed deterministic builds and documentation Aug 7, 2018
build.gradle Remove crashlytics Jul 8, 2019
checkBuild.sh fixed documentation of checkBuild.sh Feb 9, 2019
collectApks.sh removing references to modulespvbch Apr 22, 2019
crowdin.yml Created crowdin integration configm added placeholder for fil Nov 16, 2018
debug.keystore common debug keystore Sep 7, 2017
ext_settings.gradle firebase_analytics_collection_deactivated Jul 5, 2019
gradle.properties Add gradle.properties to tackle OOM while building project Jul 8, 2019
gradlew more changes lumped together Mar 24, 2017
gradlew.bat more changes lumped together Mar 24, 2017
integration-test.gradle Add integration tests functionality May 10, 2019
settings.gradle Remove bitcoincashj from project #2036 Apr 18, 2019
tools.gradle improved release process/docker compile documentation Sep 28, 2018

README.md

Beta channel

In order to receive updates quicker than others, you need to do two things:

  1. Join the G+ group so you are eligible for testing
  2. Then explicitly enable beta versions of the software in Google Play

As beta testers, please make sure you have a recent backup of the masterseed and all private keys inside Mycelium. Beta testers will experience many bugs. So far, restoring the wallet from masterseed has never been necessary, but we offer no guarantees.

Building

To build everything from source, simply checkout the source and build using gradle on the build system you need:

  • JDK 1.7

Then you need to use the Android SDK manager to install the following components:

  • ANDROID_HOME environment variable pointing to the directory where the SDK is installed
  • Android SDK Tools 22.6.4
  • SDK Platform Tools 19.0.2
  • Android SDK build Tools 19.1.0
  • Android 4.4.2 (API 19) (at least SDK Platform Rev. 3)
  • Android Extras:
    • Android Support Repository rev 5
    • Android Support Library rev 19.1
    • Google Play services for Froyo rev 12
    • Google Play services rev 17
    • Google Repository rev 8

The project layout is designed to be used with a recent version of Android Studio (currently 1.1.0)

Build commands

On the console type:

git clone https://github.com/mycelium-com/wallet-android.git
cd wallet-android
git submodule update --init --recursive

Linux/Mac type:

./gradlew clean test mbw::asProdRel mbw::asBtRel

Windows type:

gradlew.bat clean test mbw::asProdRel mbw::asBtRel
  • Voila, look into mbw/build/outputs/apk/ to see the generated apk. There are versions for both prodnet and testnet.

Alternatively you can install the latest version from the Play Store.

If you cannot access the Play store, you can obtain the apk directly from https://mycelium.com/bitcoinwallet

Deterministic builds

To validate the Mycelium image you obtain from Google Play Store, you can rebuild the Mycelium wallet yourself using Docker and compare both images following these steps:

  • Create your own Docker image from our simple Dockerfile

      $ docker build . --tag mycelium-wallet
    

    Check that this step succeeds by listing the available docker images:

      $ docker images | grep mycelium-wallet
    
  • Build Mycelium using Docker

      $ mv local.properties local.properties.bak \
          ; docker run --rm --volume $(pwd):/project --workdir /project mycelium-wallet \
          ./gradlew clean test :mbw:assProdRel \
          && ./collectApks.sh
          ; sudo chown -R $USER:$USER . \
          ; mv local.properties.bak local.properties
    

    What this line does: local.properties can break docker compiles. Move it out of the way. Run the mycelium-wallet docker with gradle test and compilation of mbw. collectApks.sh copies all apks to /tmp/release_mbw/ for easier handling. As docker might run as a different user, its generated files will also be "not yours". Make them yours using chown as super user. Last, restore whatever you had as local.properties.

    As maintainer with release keys you want to run a slightly different command: Add these docker parameters: --volume 'path/to/keys.properties':/project/keys.properties --volume 'path/to/keystore_mbwProd':/project/keystore_mbwProd --volume 'path/to/keystore_mbwTest':/project/keystore_mbwTest Build all these targets :mbw:assBtctRel :mbw:assProdRel :mbw:assBtctDeb :mbw:assProdDeb and to turn the missing release keys into an error, add this gradle option -PenforceReleaseSigning

    After this step succeeds, all apks are in /tmp/release_mbw/.

    Note: for those who use Docker Toolbox $(pwd) should be under your home user folder since this is the only folder that is shared with VM.

  • Retrieve Google Play Mycelium APK from your phone Gets package path:

      $ adb shell pm path com.mycelium.wallet
      package:/data/app/com.mycelium.wallet-1/base.apk
    

    Retrieve file:

      $ adb pull /data/app/com.mycelium.wallet-1/base.apk mycelium-signed.apk
    
  • Extract content from both apks you want to compare, using ApkTool:

      java -jar ~/path/to/apktool.jar d mbw-prodnet-release.apk
      java -jar ~/path/to/apktool.jar d mycelium-signed.apk
    
  • Compare signed apk with unsigned locally built apk using a diff tool such as meld

      diff --brief --recursive  mbw-prodnet-release/ mycelium-signed/ | grep -v "META-INF/CERT.RSA\|META-INF/CERT.SF\|META-INF/MANIFEST.MF"
    
  • The expected difference between these files are elements that depend on the signature, that only the project's maintainer can reproduce:

    • original/META-INF/CERT.RSA
    • original/META-INF/CERT.SF
    • original/META-INF/MANIFEST.MF

Features

With the Mycelium Bitcoin Wallet you can send and receive Bitcoins using your mobile phone.

  • HD enabled - manage multiple accounts and never reuse addresses (Bip32/Bip44 compatible)
  • Masterseed based - make one backup and be safe for ever. (Bip39)
  • 100% control over your private keys, they never leave your device unless you export them
  • No block chain download - install and run in seconds
  • Ultra fast connection to the Bitcoin network through our super nodes
  • For enhanced privacy and availability you can connect to our super nodes via a tor-hidden service ( .onion address)
  • Watch-only addresses (single or xPub) & private key (single or xPriv) import for secure cold-storage integration
  • Directly spend from paper wallets (single key, xPriv or master seed)
  • Trezor enabled - directly spend from trezor-secured accounts.
  • Mycelium Entropy compatible Shamir-Secret-Shared 2-out-of-3 keys spending
  • Secure your wallet with a PIN
  • Compatible with other bitcoin services through the bitcoin: URI scheme

Please note that bitcoin is still experimental and this app comes with no warranty - while we make sure to adhere to the highest standards of software craftsmanship we can not exclude that the software contains bugs. Please make sure you have backups of your private keys and do not use this for more than you are willing to lose.

This application's source is published at https://github.com/mycelium-com/wallet We need your feedback. If you have a suggestion or a bug to report create an issue.

More features:

  • Sources available for review
  • Multiple HD accounts, private keys, external xPub or xPriv accounts
  • Multiple Bitcoin denominations: BTC, mBTC, bits and uBTC
  • View your balance in multiple fiat currencies: USD, AUD, CAD, CHF, CNY, DKK, EUR, GBP, HKD, JPY, NZD, PLN, RUB, SEK, SGD, THB, and many more
  • Send and receive by specifying an amount in fiat and switch between fiat and BTC while entering the amount
  • Address book for commonly used addresses
  • Transaction history with detailed information and local stored comments
  • Import private keys using SIPA (the ones beginning with a 5) and mini private key format (Casascius private keys) from QR-codes or clipboard
  • Export private-, xPub- or xPriv-keys as QR-codes, on clipboard or share with other applications
  • Share your bitcoin address using Twitter, Facebook, email and more.
  • Integrated QR-code scanner
  • Client side load balancing between three 100% redundant server nodes located in different data centers.
  • Sign Messages using your private keys (compatible with bitcoin-qt)

Authors

Credits

Thanks to all collaborators who provided us with code or helped us with integrations! Just to name a few:

  • Nicolas Bacca from Ledger
  • Sipa, Marek and others from Trezor
  • Jani and Aleš from Cashila
  • Kalle Rosenbaum, Bip120/121
  • David and Alex from Glidera
  • Wiz for helping us with KeepKey
  • Tom Bitton and Asa Zaidman from Simplex
  • (if you think you should be mentioned here, just notify us)

Thanks to Jethro for tirelessly testing the app during beta development.

Thanks to our numerous volunteer translators who provide high-quality translations in many languages. Your name should be listed here, please contact me so I know you want to be included.

Thanks to Johannes Zweng for his testing and providing pull requests for fixes.

Thanks to all beta testers to provide early feedback.

You can’t perform that action at this time.