~ubuntu-branches/ubuntu/vivid/unity8/vivid-proposed

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
Building Unity 8
================

Only Ubuntu 14.04 (trusty) is supported as a developement environment.

download source
---------------
- create a parent folder to not pollute your setup. so that you can have different unity
  branches there (trunk, WIP etc)

  $ mkdir ~/unity8

- fetch Unity 8 source
  $ sudo apt-get install bzr
  $ bzr branch lp:unity8 ~/unity8/trunk
  $ cd ~/unity8/trunk

install dependencies
--------------------
If its your first time, install build dependencies

$ cd ~/unity8/trunk
$ ./build.sh --setup

  this will:
  - install the required dependencies to build, as well as run on the desktop
  - it should also install unity-scope-home and unity-lens-application which
    are technically "recommends", not strict dependencies

build Unity 8
-------------

$ cd ~/unity8/trunk
$ ./build.sh

You may also rebuild with the -c for clean, which just deletes the build
directory.


Running Unity 8 on your desktop
===============================

run the Unity 8 shell
---------------------
$ cd ~/unity8/trunk
$ ./run.sh

Options can be passed to test the lock screen
$ ./run.sh -p OR -k

-p is for pin lock, for which the default prompt answer is "1234"
-k is for keylock passphrase, for which the default prompt answer is "password"

Notes
-----
- to navigate, utilize the mouse left button as you would your finger
- to get the translations work, currently you have to do make install to
  put the *.mo files into correct structure. We'll look for a better solution
  later.
  $ cd builddir; make install
- if you wish to populate contacts
  $ sudo apt-get install gir1.2-ebook-1.2
  $ manage-address-book.py create
  this will:
    - Create an EDS address book
    - Populate the address book with sample data


Running Unity 8 on devices
==========================
- Ubuntu Touch builds are currently only available in 14.04 flavour
- supported hardware should match one of those listed here
  https://wiki.ubuntu.com/Touch/Devices#Running_fine
- follow the Ubuntu Touch install instructions for your chosen device
  https://wiki.ubuntu.com/Touch/Install
- make sure your device is connected to a network
- also make sure you have your SSH key in ~/.ssh/id_rsa.pub (or install one
  on the device yourself)

$ cd ~/unity/trunk
$ ./run_on_device.sh --setup
  this will:
  - install your public SSH key on the device
  - install the needed dependencies

$ ./run_on_device.sh
  this will:
  - rsync the code to the device
  - build on the device
  - replace the running shell

Options can be passed to test the lock screen
$ ./run_on_device.sh -p OR -k

-p is for pin lock, for which the default prompt answer is "1234"
-k is for keylock passphrase, for which the default prompt answer is "password"

Notes
-----
- using adb over TCP has some advantages, Google will be of help here
  - NOTE: this is not yet available for flipped images
  - TL;DR: `adb tcpip 5555; adb connect $your_device_ip`
  - you can persist the above via `adb shell setprop persist.adb.tcp.port 5555`
  - it's unsafe - anyone can connect to your device
  - with TCP the Nexus 10 doesn't drop the adb connection when locking
    the screen
- exporting ANDROID_SERIAL=$your_device_serial or
  ANDROID_SERIAL=$your_device_ip:5555 will make adb not complain about
  multiple devices
- you can export TARGET_IP=$your_device_ip TARGET_SSH_PORT=22 for run_on_device.sh
  to not use adb forwarding - useful if you use multiple devices
- using Ninja (package ninja-build - run_on_device.sh -s installs this now)
  will improve build times (especially in the nothing-to-build case)


Coding guidelines
=================
The work-in-progress coding guidelines are available under:
https://launchpad.net/canonical-client-development-guidelines


Development Environment
=======================
QtCreator (available via the Software Center) is the best IDE to hack on
Unity 8.

If using VIM, make sure you install some syntax highlighting for QML, like
https://github.com/peterhoeg/vim-qml

Running tests
=============

Tests are run from the build directory (which will be ./builddir if you used
the ./build.sh script).

To run the tests that do not require any graphical capability and therefore
are pretty fast run:

$ make test

or, alternatively:

$ ctest

To run all graphical tests, which can take a couple of minutes:

$ make qmluitests

To run the tests for a single component/class:

$ make testComponentName

So, for the DragHandle component that would be:

$ make testDragHandle

To run the tests for a single component/class under gdb (so you can catch SEGFAULTS)

$ make gdbtestComponentName

To run a test application that allow you to manually test or to simply try out
a given component:

$ make tryComponentName

So to try out, for instance, the DragHandle component, you would do:

$ make tryDragHandle

NB: Manual test or interation doesn't make sense for all components or classes,
particularly the non-graphical ones. In such cases no "tryFoo" make target is
provided.

Running autopilot tests
=======================

Autopilot tests are run from the build directory (which will be ./builddir if you used
the ./build.sh script).

$ make autopilot

If you want you can also run tests individually, for that you need to install first,
otherwise the tests will run on the system-installed version

$ make install

To see the list of existing autopilot tests you can do

$ PYTHONPATH=../tests/autopilot autopilot3 list unity8

And then run a single test with

$ PYTHONPATH=../tests/autopilot autopilot3 run unity8.some.very.long.test.name

or run them all with

$ PYTHONPATH=../tests/autopilot autopilot3 run unity8