ruboto 0.13.0.rc.0 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile.lock +4 -2
- data/README.md +183 -81
- data/RELEASE_CANDICATE_DOC +33 -0
- data/RELEASE_DOC +110 -0
- data/Rakefile +81 -30
- data/assets/rakelib/ruboto.rake +53 -185
- data/assets/src/RubotoActivity.java +18 -2
- data/assets/src/RubotoBroadcastReceiver.java +2 -5
- data/assets/src/org/ruboto/ScriptInfo.java +20 -9
- data/assets/src/ruboto/activity.rb +29 -12
- data/assets/src/ruboto/base.rb +6 -0
- data/assets/src/ruboto/service.rb +2 -4
- data/assets/src/ruboto/widget.rb +3 -2
- data/lib/java_class_gen/android_api.xml +1 -1
- data/lib/ruboto/commands/base.rb +24 -5
- data/lib/ruboto/util/emulator.rb +184 -0
- data/lib/ruboto/util/setup.rb +17 -28
- data/lib/ruboto/util/verify.rb +20 -0
- data/lib/ruboto/version.rb +1 -1
- data/test/activity/navigation_activity.rb +18 -21
- data/test/activity/navigation_activity_test.rb +19 -2
- data/test/rake_test.rb +2 -2
- data/test/ruboto_activity_test.rb +27 -0
- data/test/test_helper.rb +0 -4
- metadata +43 -36
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ccf9964eb67eb09ea2597a828b52d06dff60115b
|
4
|
+
data.tar.gz: 12313a6e4b4a2e1e4256a3c86e4155b4b48d6e83
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9155934ff5d0af26fdd163ab4627dce2303ea1359626a9ea2e2ac6fadf1ee8da067f756ee0ea49e99fca6978edec8529cbc4d6346109048973db344b28752525
|
7
|
+
data.tar.gz: 5caee4391fcd9b3d094531fe8c807aaa8db72a08ba0313f9cf46f5b3413c6ffd02e73d043d600a23b2205e67fe1fa3da976875a367c1431a7ab2cded85799535
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ruboto (0.13.0
|
4
|
+
ruboto (0.13.0)
|
5
|
+
jruby-jars
|
5
6
|
main (>= 4.7.2)
|
6
7
|
rake
|
7
8
|
|
@@ -11,12 +12,13 @@ GEM
|
|
11
12
|
arrayfields (4.9.0)
|
12
13
|
chronic (0.9.1)
|
13
14
|
fattr (2.2.1)
|
15
|
+
jruby-jars (1.7.4)
|
14
16
|
main (5.2.0)
|
15
17
|
arrayfields (>= 4.7.4)
|
16
18
|
chronic (>= 0.6.2)
|
17
19
|
fattr (>= 2.2.0)
|
18
20
|
map (>= 5.1.0)
|
19
|
-
map (6.
|
21
|
+
map (6.5.1)
|
20
22
|
rake (10.0.4)
|
21
23
|
|
22
24
|
PLATFORMS
|
data/README.md
CHANGED
@@ -1,31 +1,57 @@
|
|
1
|
-
Ruboto
|
2
|
-
|
1
|
+
Ruboto - JRuby On Android
|
2
|
+
=========================
|
3
3
|
|
4
|
-
|
4
|
+
Ruboto (JRuby on Android) is a platform for developing full stand-alone apps for
|
5
|
+
Android using the Ruby language and libraries. It includes support libraries
|
6
|
+
and generators for creating projects, classes, tests, and more. The complete
|
7
|
+
APIs of Android, Java, and Ruby are available to you using the Ruby language.
|
5
8
|
|
6
9
|
Installation
|
7
|
-
|
10
|
+
------------
|
11
|
+
|
12
|
+
To use Ruboto you need a Ruby implementation installed:
|
13
|
+
|
14
|
+
* http://ruby-lang.org/
|
15
|
+
* http://jruby.org/
|
16
|
+
* http://rubini.us/
|
17
|
+
|
18
|
+
Ruby installation tools:
|
19
|
+
|
20
|
+
* [rvm](https://rvm.io)
|
21
|
+
* [pik](https://github.com/vertiginous/pik)
|
22
|
+
|
23
|
+
Then run (possibly as root/administrator):
|
8
24
|
|
9
25
|
$ gem install ruboto
|
10
26
|
|
11
|
-
|
27
|
+
Tools
|
12
28
|
---------------
|
13
29
|
|
14
|
-
Before you use Ruboto, you
|
30
|
+
Before you can use Ruboto, you need the following tools installed:
|
31
|
+
|
32
|
+
* A Java Development Kit (JDK)
|
33
|
+
* [The Android SDK](http://developer.android.com/sdk/index.html)
|
34
|
+
* [Apache ANT](http://ant.apache.org/)
|
35
|
+
* [jruby-jars](https://rubygems.org/gems/jruby-jars)
|
36
|
+
|
37
|
+
* Add the sdk to the "ANDROID_HOME" environment variable as an absolute path
|
38
|
+
(Java does not expand tildes `~`)
|
39
|
+
* Add the sdk's `tools`, `build-tools`, and `platform-tools/` directory to your
|
40
|
+
"PATH" environment variable.
|
15
41
|
|
16
|
-
|
17
|
-
|
18
|
-
* Install [the Android SDK](http://developer.android.com/sdk/index.html)
|
19
|
-
* Add the sdk to `$ANDROID_HOME` as an absolute path (Java does not expand tildes `~`)
|
20
|
-
* Add the sdk's `tools/` and `platform-tools/` directory to your `$PATH`
|
21
|
-
* Generate an [Emulator](http://developer.android.com/guide/developing/tools/emulator.html) image unless you want to develop using your phone.
|
42
|
+
Ruboto offers a setup command to help you with the component installation and
|
43
|
+
configuration:
|
22
44
|
|
23
|
-
|
24
|
-
------------------
|
45
|
+
$ ruboto setup
|
25
46
|
|
26
|
-
|
47
|
+
* Generate an [Emulator](http://developer.android.com/guide/developing/tools/emulator.html)
|
48
|
+
image unless you want to develop using your phone.
|
49
|
+
|
50
|
+
Ruboto offers a command to help you create and run the emulator for a given
|
51
|
+
version (api-level) of Android.
|
52
|
+
|
53
|
+
$ ruboto emulator -t android-17
|
27
54
|
|
28
|
-
The Rakefile requires you to run it through JRuby's rake.
|
29
55
|
|
30
56
|
Command-line Tools
|
31
57
|
-------
|
@@ -34,7 +60,7 @@ Command-line Tools
|
|
34
60
|
* [Class generator](#class_generator) to generate additional Activities, BroadcastReceivers, Services, etc.
|
35
61
|
* [Callback generator](#class_generator) to generate specific subclasses to open up access (callbacks) for various portions of the Android API.
|
36
62
|
* [Packaging task](#packaging_task) to generate an apk file
|
37
|
-
* [
|
63
|
+
* [Release task](#release_task) to deploy a generated package to an emulator or connected device
|
38
64
|
* [Develop without having to compile to try every change](#update_scripts)
|
39
65
|
|
40
66
|
|
@@ -58,46 +84,62 @@ Ex:
|
|
58
84
|
|
59
85
|
You can subclass any part of the Android API to pass control over to a script when the specified methods are called. You can also create classes that implement a single Android interface to pass control over to ruboto.
|
60
86
|
|
61
|
-
Starting with Ruboto 0.6.0 there are easy ways to do this within your scripts.
|
87
|
+
Starting with Ruboto 0.6.0 there are easy ways to do this within your scripts.
|
88
|
+
The new way of generating interfaces and subclasses is described in the wiki
|
89
|
+
[Generating classes for callbacks](https://github.com/ruboto/ruboto/wiki/Generating-classes-for-callbacks).
|
62
90
|
|
63
91
|
<a name="packaging_task"></a>
|
64
92
|
### Packaging task
|
65
93
|
|
66
94
|
This will generate an apk file.
|
67
95
|
|
68
|
-
$ rake
|
96
|
+
$ rake debug
|
69
97
|
|
70
98
|
To generate an apk and install it to a connected device (or emulator) all in one go, run
|
71
99
|
|
72
100
|
$ rake install
|
73
101
|
|
74
|
-
|
75
|
-
|
102
|
+
To start the installed app, run
|
103
|
+
|
104
|
+
$ rake start
|
105
|
+
|
106
|
+
You can chain these commands:
|
76
107
|
|
77
|
-
|
108
|
+
$ rake install start
|
78
109
|
|
79
|
-
|
80
|
-
|
81
|
-
with an optional flag `--keystore /path/to/keystore.keystore`, which defaults to `~/.android/production.keystore`. It will ask for a password for the keystore and one for the key itself. Make sure that you remember those two passwords, as well as the alias for the key.
|
110
|
+
<a name="release_task"></a>
|
111
|
+
### Release task
|
82
112
|
|
83
|
-
|
113
|
+
When you're ready to post your app to the Market, run the `release` task.
|
114
|
+
|
115
|
+
$ rake release
|
116
|
+
|
117
|
+
This will generate a keystore for you if it is not already present.
|
118
|
+
It will ask for a password for the keystore and one for the key itself. Make
|
119
|
+
sure that you remember those two passwords, as well as the alias for the key.
|
120
|
+
|
121
|
+
Also make sure to keep your key backed up (if you lose it, you won't be able to
|
122
|
+
release updates to your app that can install right over the old versions), but
|
123
|
+
secure.
|
84
124
|
|
85
|
-
Once you have your key, use the `rake publish` task to generate a market-ready `.apk` file. You will need the `RUBOTO_KEYSTORE` and `RUBOTO_KEY_ALIAS` environment variables set to the path to the keystore and the alias for the key, respectively. So either run
|
86
|
-
$ RUBOTO_KEYSTORE=~/.android/production.keystore RUBOTO_KEY_ALIAS=foo rake publish
|
87
|
-
or set those environment variables in your `~/.bashrc` or similar file and just run
|
88
|
-
$ rake publish
|
89
125
|
Now get that `.apk` to the market!
|
90
126
|
|
91
127
|
<a name="update_scripts"></a>
|
92
128
|
### Updating Your Scripts on a Device
|
93
129
|
|
94
|
-
With traditional Android development, you have to recompile your app and
|
130
|
+
With traditional Android development, you have to recompile your app and
|
131
|
+
reinstall it on your test device/emulator every time you make a change. That's
|
132
|
+
slow and annoying.
|
95
133
|
|
96
|
-
Luckily, with Ruboto, most of your changes are in the scripts, not in the
|
134
|
+
Luckily, with Ruboto, most of your changes are in the scripts, not in the
|
135
|
+
compiled Java files. So if your changes are Ruby-only, you can just run
|
97
136
|
|
98
137
|
$ rake update_scripts
|
99
138
|
|
100
139
|
to have it copy the current version of your scripts to your device.
|
140
|
+
To update the scripts and restart the app in one go, run
|
141
|
+
|
142
|
+
$ rake update_scripts:restart
|
101
143
|
|
102
144
|
Sorry if this takes away your excuse to have sword fights:
|
103
145
|
|
@@ -105,9 +147,15 @@ Sorry if this takes away your excuse to have sword fights:
|
|
105
147
|
|
106
148
|
Caveats:
|
107
149
|
|
108
|
-
This only works if your changes are all Ruby. If you have Java changes (which
|
150
|
+
This only works if your changes are all Ruby. If you have Java changes (which
|
151
|
+
would generally just mean generating new classes) or changes to the xml, you
|
152
|
+
will need to recompile your app. The `update_scripts` task will revert to
|
153
|
+
build the complete apk and install it if it detects non-Ruby source changes.
|
109
154
|
|
110
|
-
|
155
|
+
On an actual device, you need to give the WRITE_EXTERNAL_STORAGE permission to
|
156
|
+
your app, and scripts will be updated using the SDCARD on the device/emulator.
|
157
|
+
|
158
|
+
Alternatively, you can also root your phone.
|
111
159
|
|
112
160
|
### Updating Ruboto's Files
|
113
161
|
|
@@ -121,58 +169,70 @@ You can update various portions of your generated Ruboto app through the ruboto
|
|
121
169
|
|
122
170
|
$ ruboto update jruby
|
123
171
|
|
124
|
-
* The
|
172
|
+
* The Ruboto library files and generated Java source:
|
125
173
|
|
126
174
|
1) From the root directory of your app:
|
127
175
|
|
128
|
-
$ ruboto update
|
129
|
-
|
130
|
-
* The core classes (e.g., RubotoActivity):
|
131
|
-
|
132
|
-
1) These classes are generated on your machine based on the SDKs (min and target) specified when you 'gen app' (stored in the AndroidManifest.xml)
|
133
|
-
|
134
|
-
2) You many want to regenerate them if a new version of the SDK is released, if you change your targets, or if you want more control over the callbacks you receive.
|
176
|
+
$ ruboto update app
|
135
177
|
|
136
|
-
3) From the root directory of your app:
|
137
|
-
|
138
|
-
$ ruboto gen core Activity --method_base all-on-or-none --method_include specific-methods-to-include --method_include specific-methods-to-exclude
|
139
|
-
|
140
|
-
4) The generator will load up the SDK information and find the specified methods. The generator will abort around methods that were added or deprecated based on the SDK levels. You can either use method_exclude to remove methods individually or add '--force exclude' to remove the all. You can also us '--force include' to create them anyway (added methods are created without calling super to avoid crashing on legacy hardware).
|
141
178
|
|
142
179
|
Scripts
|
143
180
|
-------
|
144
181
|
|
145
|
-
The main thing Ruboto offers you is the ability to write Ruby scripts to define
|
182
|
+
The main thing Ruboto offers you is the ability to write Ruby scripts to define
|
183
|
+
the behavior of Activities, BroadcastReceievers, and Services. (Eventually it'll
|
184
|
+
be every class. It's setup such that adding in more classes should be trivial.)
|
146
185
|
|
147
186
|
Here's how it works:
|
148
187
|
|
149
|
-
First of all, your scripts are found in `src/`
|
188
|
+
First of all, your scripts are found in the `src/` directory, and the script
|
189
|
+
name is the same as the name of your class, only under_scored instead of
|
190
|
+
CamelCased. Android classes have all of these methods that get called in certain
|
191
|
+
situations. `Activity.onDestroy()` gets called when the activity gets killed,
|
192
|
+
for example. Save weird cases (like the "launching" methods that need to setup
|
193
|
+
JRuby), to script the method onFooBar, you call the Ruby method onFooBar on the
|
194
|
+
Android object. That was really abstract, so here's an example.
|
150
195
|
|
151
|
-
You generate an app with the option `--activity FooActivity`, which means that
|
152
|
-
|
153
|
-
|
196
|
+
You generate an app with the option `--activity FooActivity`, which means that
|
197
|
+
Ruboto will generate a FooActivity for you. So you open `src/foo_activity.rb` in
|
198
|
+
your favorite text editor. If you want an activity that does nothing but Log
|
199
|
+
when it gets launched and when it gets destroyed (in the onCreate and onPause
|
200
|
+
methods). You want your script to look like this:
|
154
201
|
|
155
202
|
class FooActivity
|
156
|
-
include Ruboto::Activity
|
157
203
|
def onCreate(bundle)
|
158
|
-
|
204
|
+
super
|
205
|
+
android.util.Log.v 'MYAPPNAME', 'onCreate got called!'
|
159
206
|
end
|
160
207
|
|
161
208
|
def onPause
|
162
|
-
|
209
|
+
super
|
210
|
+
android.util.Log.v 'MYAPPNAME', 'onPause got called!'
|
163
211
|
end
|
164
212
|
end
|
165
213
|
|
166
|
-
The arguments passed to the methods are the same as the arguments that the java
|
214
|
+
The arguments passed to the methods are the same as the arguments that the java
|
215
|
+
methods take. Consult the Android documentation.
|
216
|
+
|
217
|
+
Activities also have some special methods defined to make things easier. The
|
218
|
+
easiest way to get an idea of what they are is looking over the
|
219
|
+
[demo scripts](http://github.com/ruboto/ruboto-irb/tree/master/assets/demo-scripts/)
|
220
|
+
and the
|
221
|
+
[tests](http://github.com/ruboto/ruboto/tree/master/test/activity/).
|
222
|
+
You can also read the
|
223
|
+
[ruboto source](http://github.com/ruboto/ruboto/blob/master/assets/src/ruboto)
|
224
|
+
where everything is defined.
|
167
225
|
|
168
|
-
|
226
|
+
We also have many fine examples on the
|
227
|
+
[WIKI](https://github.com/ruboto/ruboto/wiki).
|
169
228
|
|
170
229
|
Testing
|
171
230
|
-------
|
172
231
|
|
173
|
-
For each generated class, a
|
174
|
-
For example if you generate a RubotoSampleAppActivity a file
|
175
|
-
file is created containing a
|
232
|
+
For each generated class, a Ruby test script is created in the test/src
|
233
|
+
directory. For example if you generate a RubotoSampleAppActivity a file
|
234
|
+
"test/src/ruboto_sample_app_activity_test.rb" file is created containing a
|
235
|
+
sample test script:
|
176
236
|
|
177
237
|
activity Java::org.ruboto.sample_app.RubotoSampleAppActivity
|
178
238
|
|
@@ -198,55 +258,92 @@ file is created containing a sample test script:
|
|
198
258
|
|
199
259
|
You run the tests for your app using ant or rake
|
200
260
|
|
201
|
-
$
|
261
|
+
$ rake test
|
202
262
|
|
203
263
|
$ cd test ; ant run-tests
|
204
264
|
|
205
265
|
Contributing
|
206
266
|
------------
|
207
267
|
|
208
|
-
Want to contribute? Great! Meet us in #ruboto on irc.freenode.net, fork the
|
268
|
+
Want to contribute? Great! Meet us in #ruboto on irc.freenode.net, fork the
|
269
|
+
project and start coding!
|
209
270
|
|
210
|
-
"But I don't understand it well enough to contribute by forking the project!"
|
271
|
+
"But I don't understand it well enough to contribute by forking the project!"
|
272
|
+
That's fine. Equally helpful:
|
211
273
|
|
212
274
|
* Use Ruboto and tell us how it could be better.
|
213
|
-
*
|
275
|
+
* Browse http://ruboto.org/ and the documentation, and let us know how to make
|
276
|
+
it better.
|
277
|
+
* As you gain wisdom, contribute it to
|
278
|
+
[the wiki](http://github.com/ruboto/ruboto/wiki/)
|
214
279
|
* When you gain enough wisdom, reconsider whether you could fork the project.
|
215
280
|
|
216
|
-
If contributing code to the project, please run the existing tests and add tests
|
281
|
+
If contributing code to the project, please run the existing tests and add tests
|
282
|
+
for your changes. You run the tests using rake
|
217
283
|
|
218
|
-
$
|
284
|
+
$ rake test
|
285
|
+
|
286
|
+
We have set up a matrix test that tests multiple configuations on the emulator:
|
287
|
+
|
288
|
+
$ ./matrix_tests.sh
|
289
|
+
|
290
|
+
All branches and pull requests on GitHub are also testd on
|
291
|
+
https://travis-ci.org/ruboto/ruboto
|
219
292
|
|
220
293
|
Getting Help
|
221
294
|
------------
|
222
295
|
|
223
|
-
* You'll need to be pretty familiar with the Android API. The
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
* There
|
296
|
+
* You'll need to be pretty familiar with the Android API. The
|
297
|
+
[Developer Guide](http://developer.android.com/guide/index.html) and
|
298
|
+
[Reference](http://developer.android.com/reference/packages.html) are very
|
299
|
+
useful.
|
300
|
+
* There is further documentation at the
|
301
|
+
[wiki](http://github.com/ruboto/ruboto/wiki).
|
302
|
+
* If you have bugs or feature requests, please
|
303
|
+
[open an issue on GitHub](http://github.com/ruboto/ruboto/issues).
|
304
|
+
* You can ask questions in #ruboto on irc.freenode.net and on the
|
305
|
+
[mailing list](http://groups.google.com/groups/ruboto).
|
306
|
+
* There are some sample scripts (just Activities)
|
307
|
+
[here](http://github.com/ruboto/ruboto-irb/tree/master/assets/demo-scripts/).
|
228
308
|
|
229
309
|
Tips & Tricks
|
230
310
|
-------------
|
231
311
|
|
232
312
|
### Emulators
|
233
313
|
|
234
|
-
You can start an emulator corresponding to the api level of your project with
|
314
|
+
You can start an emulator corresponding to the api level of your project with
|
315
|
+
|
316
|
+
$ ruboto emulator
|
235
317
|
|
236
|
-
|
318
|
+
The emulator will be created for you and will be named after the android version
|
319
|
+
of your project, like "Android_4.0.3".
|
320
|
+
|
321
|
+
If you want to start an emulator for a specific API level use the "-t" option:
|
322
|
+
|
323
|
+
$ ruboto emulator -t 17
|
324
|
+
|
325
|
+
If you're doing a lot of Android development, you'll probably find yourself
|
326
|
+
starting emulators a lot. It can be convenient to alias these to shorter
|
327
|
+
commands.
|
237
328
|
|
238
329
|
For example, in your `~/.bashrc`, `~/.zshrc`, or similar file, you might put
|
239
|
-
|
240
|
-
alias
|
241
|
-
|
330
|
+
|
331
|
+
alias ics="ruboto emulator -t 15"
|
332
|
+
alias jellyb="ruboto emulator -t 16"
|
333
|
+
alias jb17="ruboto emulator -t 17"
|
242
334
|
|
243
335
|
|
244
336
|
Alternatives
|
245
337
|
------------
|
246
338
|
|
247
|
-
If Ruboto's performance is a problem for you, check out
|
339
|
+
If Ruboto's performance is a problem for you, check out
|
340
|
+
[Mirah](http://mirah.org/) and [Garrett](http://github.com/technomancy/Garrett).
|
248
341
|
|
249
|
-
Mirah is a language with Ruby-like syntax that compiles to java files. This
|
342
|
+
Mirah is a language with Ruby-like syntax that compiles to java files. This
|
343
|
+
means that it adds no big runtime dependencies and has essentially the same
|
344
|
+
performance as writing Java code because it essentially generates the same Java
|
345
|
+
code that you would write. This makes it extremely well-suited for mobile
|
346
|
+
devices where performance is a much bigger consideration.
|
250
347
|
|
251
348
|
Garrett is a "playground for Mirah exploration on Android."
|
252
349
|
|
@@ -256,7 +353,12 @@ Domo Arigato
|
|
256
353
|
|
257
354
|
Thanks go to:
|
258
355
|
|
259
|
-
* Charles Nutter, a member of the JRuby core team, for mentoring this RSoC
|
356
|
+
* Charles Nutter, a member of the JRuby core team, for mentoring this RSoC
|
357
|
+
project and starting the Ruboto project in the first place with an
|
358
|
+
[irb](http://github.com/ruboto/ruboto-irb)
|
260
359
|
* All of Ruby Summer of Code's [sponsors](http://rubysoc.org/sponsors)
|
261
|
-
* [Engine Yard](http://engineyard.com/) in particular for sponsoring RSoC and
|
262
|
-
|
360
|
+
* [Engine Yard](http://engineyard.com/) in particular for sponsoring RSoC and
|
361
|
+
heavily sponsoring JRuby, which is obviously critical to the project.
|
362
|
+
* All [contributors](http://github.com/ruboto/ruboto/contributors) and
|
363
|
+
[contributors to the ruboto-irb project](http://github.com/ruboto/ruboto-irb/contributors),
|
364
|
+
as much of this code was taken from ruboto-irb.
|
@@ -0,0 +1,33 @@
|
|
1
|
+
Subject: [ANN] Ruboto 0.13.0 release candidate
|
2
|
+
|
3
|
+
Hi all!
|
4
|
+
|
5
|
+
The Ruboto 0.13.0 release candidate is now available.
|
6
|
+
|
7
|
+
In this release we add support for Android API level 17 and the Android
|
8
|
+
SDK r22. There are improvements on the "ruboto setup" command, and
|
9
|
+
general preparations for the 1.0 release.
|
10
|
+
|
11
|
+
As always we need your help and feedback to ensure the quality of the release. Please install the release candidate using
|
12
|
+
|
13
|
+
[sudo] gem install ruboto --pre
|
14
|
+
|
15
|
+
and test your apps after updating with
|
16
|
+
|
17
|
+
ruboto update app
|
18
|
+
|
19
|
+
If you have an app released for public consumption, please let us know. Our developer program seeks to help developers getting started using Ruboto, and ensure good quality across Ruboto releases. Currently we are supporting the apps listed here:
|
20
|
+
|
21
|
+
https://github.com/ruboto/ruboto/wiki/Promoted-apps
|
22
|
+
|
23
|
+
If you are just starting with Ruboto, but still want to contribute, please select and complete one of the tutorials and mark it with the version of Ruboto you used.
|
24
|
+
|
25
|
+
https://github.com/ruboto/ruboto/wiki/Tutorials-and-examples
|
26
|
+
|
27
|
+
If you find a bug or have a suggestion, please file an issue in the issue tracker:
|
28
|
+
|
29
|
+
https://github.com/ruboto/ruboto/issues
|
30
|
+
|
31
|
+
--
|
32
|
+
The Ruboto Team
|
33
|
+
http://ruboto.org/
|