lbry-android/DOCKER-DEV.md
Ryan McGuire b0ddacbe89 DOCKER-DEV: Local development in a docker container (#595)
* DOCKER-DEV: Local lbry-android development via docker.
* DOCKER-DEV: Add git submodule init
2019-07-11 02:30:41 +01:00

4.7 KiB

lbry-android development environment inside docker

scripts/lbry-android.sh is a bash script to create a docker container for lbry-android development.

This is a hybrid approach where the apk is built inside docker, but you run Android Studio, adb, and the app hot-reload bundler, directly on your host.

Features

  • Clones lbry-android source code to a directory on the host, and mounts it inside the container.
  • Installs all build dependencies inside the container, leaving your host computer clean.
  • Mounted .buildozer directory to save container space. (Docker containers should stay under 10GB, and .buildozer is too big, so it has to stay in a mounted host directory instead.)
  • The biggest downloads are cached in .buildozer-downloads directory so you can easily remove .buildozer and not have to re-download the large cryostax NDK more than once.
  • Instructions for installing on a real Android device, and for setting up hot-reload.
  • Only a handful of commands to go from zero->hero.

Requirements

Install all of the following on your host computer:

Install

Clone lbry-android:

LBRY_GIT=$HOME/git/vendor/lbryio/
mkdir -p $LBRY_GIT
git clone https://github.com/lbryio/lbry-android.git $LBRY_GIT
cd $LBRY_GIT/lbry-android
git submodule update --init --recursive

Install a bash alias to the scripts/lbry-android.sh script:

echo "alias lbry-android=$LBRY_GIT/lbry-android/scripts/lbry-android.sh" >> $HOME/.bashrc

source ~/.bashrc

Usage

  • First create the base docker image:
lbry-android docker-build

(If anytime you change the docker build scripts in the scripts subdirectory, you should rebuild the image again.)

  • Setup buildozer and install dependencies:
lbry-android setup
  • Build the apk:
lbry-android build

The apk will be built and end up in the lbry-android/bin/ subdirectory.

Running on a real Android device

Once you have the apk built, you can install it on a real Android device to start testing.

Follow the Android documentation for enabling USB debugging on your device.

Once you have enabled debugging, do the following:

  • Plug your device into a USB port on the host computer.
  • Run:

~/Android/Sdk/platform-tools/adb devices

  • ADB should list your device like so:
[ryan@t440s lbry-android]$ adb devices
List of devices attached
HT71R0000000	device
  • The first time you connect, you should see a modal dialog on the device asking to confirm the host id. You must approve it, or adb will fail to connect.

  • If after trying several times, adb is still not connecting to your device, and adb lists your device as unauthorized, you may need to follow this advice and delete your $HOME/.android directory.

  • Install the apk (whatever the current version is called) to the device:

~/Android/Sdk/platform-tools/adb install ./bin/browser-0.7.5-debug.apk
  • Open the app on your device, and follow the initial steps to get to the main lbry-android browser page.

  • Create a tcp tunnel over the adb bridge, for the app to handle live-reload:

~/Android/Sdk/platform-tools/adb reverse tcp:8081 tcp:8081
  • Start the live-reload server on the host:
cd app/
yarn install
yarn start
  • With your device currently running the lbry-android app, shake the device from side to side, and a menu will appear. Choose Enable Hot Reloading.

  • The app should reload itself.

  • Now make a change to the source code to test hot reload. From the host, open up the main page view source code: app/src/component/uriBar/view.js. Find the line that reads Search movies, music, and more (This is the main search bar at the top of the app.) - Change some of the text and save the file.

  • If hot-reload is working, within a few seconds the phone should reload the page automatically and show the change that you made.

  • If the hot-reload does not work, try closing the app (dismiss the window from the tab overview, via android square button) and reload the app.