Commit Graph

25 Commits

Author SHA1 Message Date
Imanol Fernandez
7bd74466d2 servo: Merge #15773 - Android life cycle improvements and Gradle integration (from MortimerGoro:android_improvements); r=larsbergstrom,fabricedesre
This PR includes Android life cycle Improvements and Gradle integration for android packaging.

Android life cycle improvements are implemented in both the new [MainActivity](https://github.com/servo/servo/compare/master...MortimerGoro:android_improvements?expand=1#diff-f43708b102e98272c2af7454b8846927) and native code in this related PR: https://github.com/servo/glutin/pull/117
- Properly handle the life cycle of the Android Activity: manage EGLContext lost & restore, and animation loop pause/resume when the app goes to background/foreground or orientation changes. In the current upstream Servo crashes when the app goes to background, activity stops or changes orientation
- Handle event loop awake for Servo Animation loop
- Handle screen resize & orientation events
- Implement new keep_screen_on preference which keeps Android device's screen from ever going to sleep: very useful for games or WebVR
- Implement a full screen mode enabled by preference: very useful for games or WebVR
- Implement new shell.native-orientation preference which allows to lock the Activity to a specific orientation
- Automatically sync new android assets to sdcard when the Android version code is changed.  In the current upstream only the existence of the folder is check but resources are not updated

ofscreen_gl_context is updated to fix this: https://github.com/emilio/rust-offscreen-rendering-context/pull/83

This PR integrates Gradle build system for android packaging. Most of the code is implemented in this [build.gradle](https://github.com/servo/servo/compare/master...MortimerGoro:android_improvements?expand=1#diff-89cdb9324addb994cdba0a158b209547) . We can get rid of [build-apk](https://github.com/servo/servo/compare/master...MortimerGoro:android_improvements?expand=1#diff-40f5a7cf22f94aad059b2c1795347f5e) and manual jar dependency copying in the [package_commands.py](https://github.com/servo/servo/compare/master...MortimerGoro:android_improvements?expand=1#diff-0d425b142c8d10ae6ac1f3711fb5c23a). The correct version of gradle is automatically downloaded using the gradlew wrapper.

Some improvements:
- Allows to include more complex android dependencies/SDKs like AARs, manifest auto-merging and more.
- Improved packaging process: The gradle project is always in the same folder, it uses relative paths for everything (assets, native libraries) and outputs the apk into the correct target folder in servo. In the current upstream, ant/python build system copies the manifest, project, resources and jars each time so you end with multiple copies of the same files.
- Improved dependency declaration. We do not have to manually copy jar dependencies in the python script anymore. The gradle build scripts itself is able to search for the dependencies in the correct servo target folder.
- Supports packaging apks with different architectures: armeabi, armeabi-v7a, aarch64. We still need to fix some native servo compilation issues with armeabi-v7a, aarch64 due to dependencies which use `make`. I'll push this changes in a separate PR of the python build files but the gradle file is already ready to handle that.
- We can easily create product flavors for different versions of Servo. For example a default browser, a WebVR browser with additional dependencies or a Servo android Webview component
- Fixes minor.major.52 build error when blurdroid cargo dependency is compiled using java8 (the default in new Linux machines). The gradle build file enables the new Jack compiler which supports Java8 dependencies.
- The project can be opened with Android Studio and run the brand new GPU debugger on any Android phone. I'll add some docs in the Wiki about this.

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix #14568 (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: 2b5c17c43a517b6d6bd981f5fa905536dddd3beb
2017-04-21 15:52:13 -05:00
Fabrice Desré
ab0c63d3d5 servo: Merge #15609 - Android cleanup (from fabricedesre:android-cleanup); r=Wafflespeanut
<!-- Please describe your changes on the following line: -->
As I dive in the Android code, a bit of cleanup:
- jni/main.c was totally useless, and its presence misleading. I left the jni/ directory to please `ndk-build`.
- the logging redirection in servo/main.rs was redondant with the implementation in the injected android glue.

Most other changes are just due to my editor doing a `rustfmt` when saving files.
I also turned on RUST_LOG to `debug` by default, that helps quite a bit to see what's happening.

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X ] `./mach build -d` does not report any errors
- [X ] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [ ] There are tests for these changes OR
- [X ] These changes do not require tests because unfortunately we don't have Android tests.

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: 082fbe9e15996875edc586f46c6a2d54947b4620
2017-02-18 10:38:18 -08:00
Zhuowei Zhang
59d3a1b2e3 servo: Merge #15396 - android: extract resources to external storage on first launch (from zhuowei:android-extract-resources); r=larsbergstrom
<!-- Please describe your changes on the following line: -->

If /sdcard/servo doesn't exist, extract it from the assets/ folder of the APK. This fixes issue #12129.

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix #12129 (github issue number if applicable).

<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

I tested this on a Nexus 6P running Android 7.1: on launch, the app correctly detects that /sdcard/servo is missing, extracts the contents from assets/, and launches without force closing.

This is my first Servo pull request, so apologies in advance if I'm doing something wrong. Also, I was unable to build the entirety of Servo from source (complains about missing freetype), so I just built the Java portion separately; would that impact anything?

Source-Repo: https://github.com/servo/servo
Source-Revision: 349971b38019ea5513650090a5cad1878d33b431
2017-02-09 12:27:12 -08:00
Matt Brubeck
a6de97247a servo: Merge #15355 - Update clap, clippy, deflate, flate2, open, unicode-segmentation, owning_ref, parking_lot, phf, quote, walkdir (from mbrubeck:always-be-updating); r=jdm
Source-Repo: https://github.com/servo/servo
Source-Revision: 6553a5c1e088c0a13581834af5e8ab150af87fee
2017-02-02 11:44:01 -08:00
UK992
fa8ef55c08 servo: Merge #14737 - Package: Various improvements (from UK992:package-prefs); r=Wafflespeanut
Fixes https://github.com/servo/servo/issues/11966
Fixes https://github.com/servo/servo/issues/12707

Also adds simple mechanism to set os specific prefs, by adding  like `os:macosx,os:windows;` before pref name.

Source-Repo: https://github.com/servo/servo
Source-Revision: b5f3d7dd413886037de8f1bc435ede34a98421b3
2016-12-29 10:28:37 -08:00
Mátyás Mustoha
c0b6566c8c servo: Merge #14528 - Add C++ runtime shared object to the Android APK (from mmatyas:android_cppruntime); r=larsbergstrom
<!-- Please describe your changes on the following line: -->
At the moment, the Android port requires `libc++_shared.so` to run -- this patch adds the file to the generated APK.

Part of #13154.

If you know a cleaner way to solve this issue, feel free to share it! Static linking didn't work, see the related issue.

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: 91a223093368be339ad00f42df4214ac36e1be6e
2016-12-13 13:35:25 -08:00
Mátyás Mustoha
7ba01efc0d servo: Merge #13945 - Update the Android build system (from mmatyas:android_libcpp_change); r=larsbergstrom,aneeshusa
A huge update for the Android build system, which makes the Android target build again.

There are still some runtime issues, see #13154. CC & created by @larsbergstrom.

Fixes #12562.

Source-Repo: https://github.com/servo/servo
Source-Revision: b9330151b980c838887c2da73481882947cc2922
2016-10-28 16:11:26 -05:00
Attila Dusnoki
94bdea58f9 servo: Merge #12875 - WebBluetooth Android support (from dati91:android); r=larsbergstrom
<!-- Please describe your changes on the following line: -->
Add android support for Webbluetooth.
Also adjust to the changed device api.

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [ ] There are tests for these changes OR
- [X] These changes do not require tests because there is no test api yet.

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: 057bcddd0f63a97b8cd1954310878c423d02e056
2016-09-06 10:44:41 -05:00
Alan Jeffrey
1a348eb9d5 servo: Merge #12447 - All our Cargo.toml files should contain an MPL-2.0 license field (from asajeffrey:license-mpl-2.0); r=frewsxcv
<!-- Please describe your changes on the following line: -->

Added a `license = "MPL-2.0"` field to all our `Cargo.toml` files, and added a check to `test-tidy` that the license is present.

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #12434
- [X] There are tests for these changes

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: 650d1d1185eecdc4c8b605bb0290ece7de839015
2016-07-14 09:33:18 -07:00
Lars Bergstrom
8f2c766bf9 servo: Merge #11691 - Add very simple Android browser page load support (from larsbergstrom:android_load); r=mbrubeck
I've long had this set of private patches that enables actually demoing Servo on Android without having the device connected, but they're a bit hackish due to some current limitations in our windowing toolkit library. I'm considering committing them, though, as it makes the resulting APK *actually* somewhat usable.

Thoughts / r? @mbrubeck

Source-Repo: https://github.com/servo/servo
Source-Revision: 2b32ec430124ef19bf685610c74367b520c020aa
2016-06-09 22:45:23 -05:00
Lars Bergstrom
114011b947 servo: Merge #11687 - Android basedir (from larsbergstrom:android_basedir); r=mbrubeck
<!-- Please describe your changes on the following line: -->
This fixes #11633, as when the new basedir stuff that uses xdg was added, it did not preserve the previous Android behavior, which used `/sdcard/servo`. Obviously, long-term we should be calling into the Android runtime to determine the per-run installation path and be both unpacking and loading resources from there, but this restores the previous behavior.

r? @mbrubeck

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [ x] `./mach build -d` does not report any errors
- [x ] `./mach test-tidy` does not report any errors
- [x] These changes fix #11633 (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ x] These changes do not require tests because _____

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: ebb1cb30f758273ba3efbe1e1ae3a504faed8293
2016-06-09 15:57:56 -05:00
Aneesh Agrawal
2059aa6817 servo: Merge #11406 - Fix Android APK building (packaging) (from aneeshusa:add-missing-build-apk-semicolon); r=mbrubeck
Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data:
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy --faster` does not report any errors
- [ ] These changes help with #10339.

Either:
- [x] There are tests for these changes (android-nightly builder) OR
- [ ] These changes do not require tests because _____

Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process.

I missed this syntax error during my review, and we don't check that
packaging succeeds in regular build suite, but only as a Nightly build.

@larsbergstrom should we run the packaging as part of the regular build? I think it is important that this continue to stay working, especially with #9918. In that case, the only difference with the nightly builder is whether or not to upload to S3.

Source-Repo: https://github.com/servo/servo
Source-Revision: 1efacd393843a761ee91c3a1765ef4801ccf18cc
2016-05-26 21:48:17 -05:00
Mitchell Hentges
047b8e9a88 servo: Merge #11278 - Reduce 'android-18' duplication by putting it in $ANDROID_TARGET env variable (from mitchhentges:8348-reduce-duplication); r=aneeshusa
Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data:
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy --faster` does not report any errors
- [x] These changes fix #8348

Either:
- [X] These changes do not require tests because ~~I'm lazy~~ it's a configuration change, and asserting default values is usually tedious and not very helpful

Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process.

---

Allegedly, this broke the build [back in the day](https://github.com/servo/servo/pull/8519).
Going to see if it's a piece of cake to land now

Source-Repo: https://github.com/servo/servo
Source-Revision: ea38ccfdfe12c64d41ff460f358e21cafead8414
2016-05-24 13:08:05 -07:00
Matt Brubeck
6ee8055d54 servo: Merge #10997 - Upgrade to OpenSSL 1.0.1t on Android (from mbrubeck:openssl-1.0.1t); r=aneeshusa
Source-Repo: https://github.com/servo/servo
Source-Revision: 7a439e62371189a986f3339b80b70e76642dc060
2016-05-04 06:18:28 -07:00
Zbynek Winkler
a2221f5bbe servo: Merge #10751 - Report lines starting with && in tidy (from zwn:tidy-start-operator); r=Wafflespeanut
Partial implementation of the issue #10692 (the easy part).

Source-Repo: https://github.com/servo/servo
Source-Revision: d926b5d3762a101d5280266f806f2b979f73b695
2016-04-22 10:40:06 -07:00
UK992
5da2e959b4 servo: Merge #9908 - Check tidy for "support/android/build-apk/" (from UK992:tidy-fix); r=ecoal95
Fixes  #9893
r? @ecoal95

Source-Repo: https://github.com/servo/servo
Source-Revision: e3bea4f88724c9fc7dfceab590dd0df90a0a7a3f
2016-03-08 11:57:08 +05:00
Cengiz Can
396cbdc0a3 servo: Merge #9891 - Replace deprecated fs::walk_dir call with walkdir crate (from cengizIO:master); r=ecoal95
While working on #8351 I discovered that deprecated fs::walk_dir is used in android support files.

This is my first PR to any Rust project, so any constructive feedback is more than welcome!

Thanks

Source-Repo: https://github.com/servo/servo
Source-Revision: dedae5e459724d32ada7d3f4e33d8533bddb43fa
2016-03-07 18:46:02 +05:00
Ivan Enderlin
aa01dd167e servo: Merge #9483 - Quality: Fix CS (from Hywan:cs); r=KiChjang
Just remove trailing spaces.

Source-Repo: https://github.com/servo/servo
Source-Revision: b468a6c31c69f6e230f7304bd8925fc4a0500f25
2016-02-05 22:27:59 +05:00
Matt Brubeck
7686f5dd8a servo: Merge #8891 - Android build system improvements (from mbrubeck:mach-install); r=larsbergstrom
This PR adds a `mach install` command (a convenient way to run `adb install`), and does some minor code cleanup.

It also fixes parallelism in the OpenSSL build.  For [complicated reasons][1], a sub-Make will not inherit `-j` options from its parent process unless it is invoked directly from another Makefile.  This means we should run make from openssl.makefile rather than openssl.sh.

r? @larsbergstrom

[1]: http://make.mad-scientist.net/papers/jobserver-implementation/

Source-Repo: https://github.com/servo/servo
Source-Revision: a1fb12616a29d2190baadd20d7763af1d9c02260
2015-12-12 18:01:53 +05:00
Simon Sapin
e2b7aeef56 servo: Merge #8518 - Silence the "Nothing to be done for 'all'." message (from servo:shhhhh-make); r=larsbergstrom
r? @larsbergstrom

Source-Repo: https://github.com/servo/servo
Source-Revision: 8c3d2235287767180180290622f9f259e821330c
2015-11-14 01:22:04 +05:00
Lars Bergstrom
e114595c7b servo: Merge #8460 - Disable zipalign until we have stable builder automation to install a… (from larsbergstrom:remove_zipalign); r=Ms2ger
…nd locate it

r? @mbrubeck

The basic problem here is that `zipalign` is in the tools directory on some installs, in build-tools/22.0 on some, build-tools/20.0 on others, etc. I'll need to find a more stable way of locating the tool (even if it's just shelling out to `find` - I almost autoconf!). Disabling use of it for now since it's optional and is currently breaking our nightly builds.

Source-Repo: https://github.com/servo/servo
Source-Revision: 75e01de627376d987cff8bc87b5f23c79e5f36af
2015-11-11 20:44:03 +05:00
Lars Bergstrom
00f300fba4 servo: Merge #8288 - New Android suppport (from larsbergstrom:new_android_build); r=mbrubeck
r/f? @mbrubeck

No need to r+ urgently; I want to do a little bit more testing of the release build, but I'm hoping to land this bit (moving to a more sane build process) next week.

The new version of building an APK:
1) Removes the glutin-based APK builder from the link step
2) Adds a build.rs step to the build of the final Servo library that adds the native code required by glutin's android_rs_glue (e.g., `ANativeActivity_onCreate` definition)
3) Replaces the link step with a `fake-ld.sh` script that instead creates a libservo.so
4) Adds a new mach `package` step to build the APK that has some Rust code that builds the library from a set of in-tree build files

This setup fixes a number of problems:
1) We can use gdb, because we use `ndk-build`, which adds the .gdbserver info, plus we keep around all of the build files (also required by the ndk gdb)
2) We can add more Java code & hooks to handle Android intents
3) We no longer have any git submodules or the awkward two-step build with android-rs-glue

Many other setups were tried (and failed). The most obvious ones is building a libservo.so from a `dylib` target from the servo build on Android. This doesn't work because you can't have a different default lib target on one platform than others in Cargo, and you also can't pass it in from the commandline (e.g., --lib does not have a dylib arg). Additionally, if you don't go through the intermediate libservo.rlib step (which removes unused symbols), then you end up with a TON of missing symbols because our -sys crates are super sloppy about that. I spent a few weeks beginning to clean them up, but since it's something we can't easily enforce (and new -sys packages will have this problem, too, since it's only an issue with the Android loader), it made more sense to me to just have the build set up to discard those unused bits of code before they ever get to the linker, much less the loader.

Source-Repo: https://github.com/servo/servo
Source-Revision: 0699d38e80c029a384354da96596421f3a97ceef
2015-11-05 05:21:48 +05:00
Manish Goregaokar
30776951fa servo: Merge #4570 - Fix Android warnings (from Manishearth:android-warn); r=jdm
My local android build is a bit wonky so I'm not sure if all warnings have been fixed, though. I'll try to poke around and fix it.

Source-Repo: https://github.com/servo/servo
Source-Revision: d9751c0fbb13d04b27c42a9ba5065b5af26f1286
2015-01-08 21:54:48 -07:00
Glenn Watson
81653d18b6 servo: Merge #4581 - Update android openssl version due to security advisory https://www.openssl.org/news/secadv_20150108.txt (from glennw:openssl-update); r=larsbergstrom
Source-Repo: https://github.com/servo/servo
Source-Revision: 78798026ac245187f92d7d3f88f7fe012c63ff9d
2015-01-08 17:15:50 -07:00
Glenn Watson
4e87a2eaa4 servo: Merge #4292 - Use mach to build openssl on android instead of glut makefile (from glennw:android-ssl); r=mbrubeck
The glut makefile will be removed shortly after glutin lands
for android, so we need to build openssl for android elsewhere
in the build process.

Source-Repo: https://github.com/servo/servo
Source-Revision: 2741fd2e139b9cb8e9f14857877f567ecae3bced
2014-12-08 17:54:57 -07:00