NCTU Servo Android Browser MVP
===
Building a front-end prototype for servo on Android.
Meta issue page on GitHub: https://github.com/servo/servo/issues/15776
## Members
**Students**
- [Jasmine Chen](http://t.me/lnishan)
- [J wang](http://t.me/jeremywangyuan)
**Mentors**
- [Shing Lyu](http://t.me/shinglyu)
- [Kan-Ru Chen](http://t.me/kanru)
**Coordinator**
- [Irvin Chen](http://t.me/Irvin)
## The process
1. Find/file a bug to https://github.com/servo/servo
2. Fork servo/servo
3. Start hacking
4. Submit a pull request
5. A bot will find you an reviewer
- If the reviewer is not responding, ask on IRC or ping me (Shing)
6. Reviewer will ask you to modify your code (if necessary)
- modify it, commit to your branch, push to your fork directly
- The change will show up in the pull request
- The reviewer will check again
7. Reviewer will give you an “r+” means it’s ready to go
- You might need to do a rebase
8. Reviewer will tell the bot to do testing for you and merge the code if all passed
- If any failed, fix it
## The goal
- Android browser MVP https://github.com/servo/servo/issues/15776
- Task breakdown
- Keep a blog/note for your learning
- This will help if you failed to deliver a working product (which might actually happen!)
## How to get help
- IRC
- jdm (Toronto time) is in charge for the students
- Shing (Taipei time) is time-zone friendly and can speak in Chinese
- Fabrice (Mountain View) is the Android expert
- Ask in the bug/pull request directly
- Wiki has some good documentation https://github.com/servo/servo/wiki
- There are many comment in the code
- API references: https://doc.servo.org/servo/index.html
## Notes
Documenting significant events :)
---
### *Mar. 22, 2017*
**Things we did:**
- `./mach run <url>` ==> https://github.com/servo/servo/blob/master/python/servo/post_build_commands.py#L67
**Issues encountered & Lessons learned:**
- The run command depends on `adb` (Android Debug Bridge) and `am` (Activity Manager)
**TODOs:**
- Find out what took place during
```
am force-stop com.mozilla.servo
echo servo >/sdcard/servo/android_params
"echo '%s' >>/sdcard/servo/android_params" % param.replace("'", "\\'")
am start com.mozilla.servo/com.mozilla.servo.MainActivity
```
---
### *Mar. 7, 2017*
**Things we did:**
- Setep a Kubuntu 16.04 VM on VMWare Workstation, Windows 10
- Built servo for Android successfully on Kubuntu 16.04
- Built and tested the .apk
- Wrote some instructions & notes in regard to the building process: https://lnishan.github.io/2017/building-servo-for-android/
**Issues encountered & Lessons learned:**
- .apk should be packaged using OpenJDK 8
- Currently, the Servo app crashes or blanks out on most webpages. Can browse to the [frontpage of Mozilla](https://www.mozilla.org) but the stylesheets and images seem to be completely ignored
**TODOs:**
- Document and report minor issues related to building for Android
---
### *Mar. 6, 2017*
**Things we did:**
- Setup a VM on VirtualBox, macOS Sierra
- Built servo for Android successfully on Kubuntu 16.10
**Issues encountered & Lessons learned:**
- Memory usage peaked at ~2.5G, so a minimum of 3G RAM is required for a successful build (encountered ICEs with rustc)
- ~~(Unresolved) Ubuntu 16.10 only provides OpenJDK 8 whereas packaging (ie. `./mach package`) depends on OpenJDK 7~~ -> It actually depends on OpenJDK 8 but for some reasons some .jar files were compiled with OpenJDK 7 and thus the imcompatibility.
- Ubuntu 16.04
```bash
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
sudo update-alternatives --config java
```
**TODOs:**
- Document and report minor issues
- Test the build
---
### *Feb. 28, 2017*
**Things we did:**
- Attempt to build servo for Android
- Reported issue: [Issues while Building servo for Android (on macOS Sierra) #15758](https://github.com/servo/servo/issues/15758#issuecomment-283559637)
**Issues encountered & Lessons learned:**
- macOS not officially supported for Android builds
- NDK r12 or r12b is a must. Manual install is required
**TODOs:**
- None
---