CONTRIBUTING.md 6.7 KB
Newer Older
1 2
Contributing to the Flutter engine
==================================
A
Adam Barth 已提交
3

4
[![Build Status](https://travis-ci.org/flutter/engine.svg)](https://travis-ci.org/flutter/engine)
A
Adam Barth 已提交
5

I
Ian Hickson 已提交
6 7 8
Things you will need
--------------------

C
Collin Jackson 已提交
9
 * Linux or Mac OS X. (Windows is not yet supported.)
I
Ian Hickson 已提交
10
 * git (used for source version control).
I
Ian Hickson 已提交
11
 * An IDE. We recommend [Atom](https://github.com/flutter/engine/wiki/Using-Atom-with-Flutter).
I
Ian Hickson 已提交
12
 * An ssh client (used to authenticate with GitHub).
A
Adam Barth 已提交
13
 * Chromium's [depot_tools](http://www.chromium.org/developers/how-tos/install-depot-tools) (make sure it's in your path). We use the `gclient` tool from depot_tools.
I
Ian Hickson 已提交
14 15
 * Python (used by many of our tools, including 'gclient').
 * curl (used by `gclient sync`).
I
Ian Hickson 已提交
16

I
Ian Hickson 已提交
17
You do not need [Dart](https://www.dartlang.org/downloads/linux.html) installed, as a Dart tool chain is automatically downloaded as part of the "getting the code" step. Similarly for the Android SDK, it's downloaded by the build step below where you run `download_android_tools.py`.
I
Ian Hickson 已提交
18

I
Ian Hickson 已提交
19 20
Getting the code and configuring your environment
-------------------------------------------------
A
Adam Barth 已提交
21

I
Ian Hickson 已提交
22
 * Ensure all the dependencies described in the previous section, in particular git, ssh, depot_tools, python, and curl, are installed.
I
Ian Hickson 已提交
23
 * Fork `https://github.com/flutter/engine` into your own GitHub account. If you already have a fork, and are now installing a development environment on a new machine, make sure you've updated your fork so that you don't use stale configuration options from long ago.
I
Ian Hickson 已提交
24
 * If you haven't configured your machine with an SSH key that's known to github then
H
updated  
Hans Muller 已提交
25
   follow the directions here: https://help.github.com/articles/generating-ssh-keys/.
26
 * Create an empty directory for your copy of the repository. Call it what you like. For
27 28
   the sake of the instructions that follow, we'll call it `engine`.
 * Create a `.gclient` file in the `engine` directory with the following contents, replacing
A
Adam Barth 已提交
29
   `<your_name_here>` with your GitHub account name:
A
Adam Barth 已提交
30 31 32 33 34 35

```
solutions = [
  {
    "managed": False,
    "name": "src",
36
    "url": "git@github.com:<your_name_here>/engine.git",
A
Adam Barth 已提交
37 38 39 40 41 42 43
    "custom_deps": {},
    "deps_file": "DEPS",
    "safesync_url": "",
  },
]
target_os = ["android"]
```
44 45

 * `cd engine` (Change to the directory in which you put the `.gclient` file.)
I
Ian Hickson 已提交
46
 * `gclient sync` This will fetch all the source code that Flutter depends on. Avoid interrupting this script, it can leave your repository in an inconsistent state that is tedious to clean up.
47
 * `cd src` (Change to the directory that `gclient sync` created in your `engine` directory.)
I
Ian Hickson 已提交
48
 * `git remote add upstream git@github.com:flutter/engine.git` (So that you fetch from the master repository, not your clone, when running `git fetch` et al.)
49
 * Run `./tools/android/download_android_tools.py` .
50 51 52
 * Add `.../engine/src/third_party/dart-sdk/dart-sdk/bin/` to your path so that you can run the `pub` tool more easily.
 * Add `.../engine/src/third_party/android_tools/sdk/platform-tools` to your path so that you can run the `adb` tool more easily. This is also required by the `flutter` tool, which is used to run Flutter apps.
 * Make sure you are still in the `src` directory that the `gclient sync` step created earlier.
I
Ian Hickson 已提交
53 54 55
 * If you're on Linux, run `sudo ./build/install-build-deps-android.sh` .
 * If you're on Linux, run `sudo ./build/install-build-deps.sh` .
 * If you're on Mac, install Oracle's Java JDK, version 1.7 or later.
56
 * If you're on Mac, install `ant`: `brew install ant` .
A
Adam Barth 已提交
57

58 59
Building and running the code
-----------------------------
A
Adam Barth 已提交
60

61 62
### Android (cross-compiling from Mac or Linux)

63
Run the following steps, from the `src` directory created in the steps above:
64

65 66 67
 * `gclient sync` to update your dependencies.
 * `./sky/tools/gn --android` to prepare your build files.
 * `ninja -C out/android_Debug` to build an Android Debug binary.
68

69 70 71 72
To run an example with your locally built binary, you'll also need to clone
[the main Flutter repository](https://github.com/flutter/flutter). See
[the instructions for contributing](https://github.com/flutter/engine/blob/master/CONTRIBUTING.md)
to the main Flutter repository for detailed instructions.
A
Adam Barth 已提交
73

74 75 76 77 78
Once you've got everything set up, you can run an example using your locally
built engine by switching to that example's directory, running `pub get` to make
sure its dependencies have been downloaded, and using `flutter start` with an
explicit `--engine-src-path` pointing at the `src` directory. Make sure you have
a device connected over USB and debugging enabled on that device:
A
Adam Barth 已提交
79

80 81 82
 * `cd /path/to/flutter/examples/hello_world`
 * `pub get`
 * `../../bin/flutter start --engine-src-path /path/to/engine/src`
A
Adam Barth 已提交
83

84 85 86 87
You can also specify a particular Dart file to run if you want to run an example
that doesn't have a `lib/main.dart` file using the `-t` command-line option. For
example, to run the `tabs.dart` example in the `examples/widgets` directory on a
connected Android device, from that directory you would run:
88

89
 * `flutter start --engine-src-path /path/to/engine/src -t tabs.dart`
90 91 92 93 94

### Desktop (Mac and Linux), for tests

 * `gclient sync` to update your dependencies.
 * `./sky/tools/gn` to prepare your build files.
95
 * `ninja -C out/Debug` to build a desktop Debug binary.
96

97 98 99
To run the tests, you'll also need to clone [the main Flutter repository](https://github.com/flutter/flutter).
See [the instructions for contributing](https://github.com/flutter/engine/blob/master/CONTRIBUTING.md)
to the main Flutter repository for detailed instructions.
100

A
Adam Barth 已提交
101 102 103
Contributing code
-----------------

104
We gladly accept contributions via GitHub pull requests.
105 106

To start working on a patch:
107 108 109

 * `git fetch upstream`
 * `git checkout upstream/master -b name_of_your_branch`
110 111 112
 * Hack away. Please peruse our [style guides](sky/specs/style-guide.md) and [design
   principles](sky/specs/design.md) before working on anything non-trivial. These
   guidelines are intended to keep the code consistent and avoid common pitfalls.
113
 * `git commit -a -m "<your brief but informative commit message>"`
114
 * `git push origin name_of_your_branch`
115 116 117

To send us a pull request:

118 119
 * `git pull-request` (if you are using [Hub](http://github.com/github/hub/)) or
   go to `https://github.com/flutter/engine` and click the
120
   "Compare & pull request" button
C
Collin Jackson 已提交
121

I
Ian Hickson 已提交
122 123 124 125 126
Please make sure all your checkins have detailed commit messages explaining the patch.
If you made multiple commits for a single pull request, either make sure each one has a detailed
message explaining that specific commit, or squash your commits into one single checkin with a
detailed message before sending the pull request.

C
Collin Jackson 已提交
127 128 129 130
You must complete the
[Contributor License Agreement](https://cla.developers.google.com/clas).
You can do this online, and it only takes a minute.
If you've never submitted code before, you must add your (or your
C
Collin Jackson 已提交
131
organization's) name and contact info to the [AUTHORS](AUTHORS) file.