rhodes 3.2.0.beta.5 → 3.2.0.beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +3 -0
- data/Manifest.txt +10 -1
- data/Rakefile +6 -0
- data/bin/get-rhodes-info +4 -27
- data/bin/set-rhodes-sdk +4 -1
- data/doc/build.txt +12 -3
- data/doc/extensions.txt +26 -0
- data/installer/Rakefile +156 -0
- data/installer/ServiceLib.nsh +369 -0
- data/installer/jake.rb +478 -0
- data/installer/rhostudio.nsi +76 -143
- data/lib/extensions/digest-sha1/ext/Rakefile +58 -40
- data/lib/extensions/fileutils/fileutils.rb +3 -2
- data/lib/extensions/hmac/hmac-md5.rb +11 -0
- data/lib/extensions/hmac/hmac-rmd160.rb +11 -0
- data/lib/extensions/hmac/hmac-sha1.rb +11 -0
- data/lib/extensions/hmac/hmac-sha2.rb +25 -0
- data/lib/extensions/hmac/hmac.rb +118 -0
- data/lib/extensions/hmac/ruby_hmac.rb +2 -0
- data/lib/extensions/net-http/net/http.rb +1 -1
- data/lib/framework/rho/render.rb +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +1 -6
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesApplication.java +52 -8
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +8 -15
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java +4 -5
- data/platform/android/build/android.rake +3 -1
- data/platform/iphone/rbuild/iphone.rake +7 -7
- data/platform/shared/common/RhodesApp.cpp +18 -14
- data/platform/shared/common/RhodesApp.h +1 -0
- data/platform/shared/rubyext/System.cpp +3 -0
- data/platform/symbian/build/symbian.rake +13 -5
- data/platform/wp7/RhoRubyLib/net/NetRequest.cs +9 -1
- data/rakefile.rb +6 -0
- data/res/generators/templates/application/Rakefile +10 -1
- data/res/generators/templates/application/app/layout.erb +1 -1
- data/res/generators/templates/application/build.yml +2 -2
- data/res/generators/templates/application/public/jqmobile/{jquery.mobile.iphone.css → jquery-mobile-iphone.css} +0 -0
- data/res/generators/templates/application/public/js/jqmobile-patch.js +23 -20
- data/spec/framework_spec/app/spec/library/digest/sha1/file_spec.rb +3 -3
- data/spec/framework_spec/app/spec/library/net/http/http/Proxy_spec.rb +3 -2
- data/spec/framework_spec/app/spec/library/net/http/http/copy_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/delete_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/finish_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/fixtures/http_server.rb +18 -12
- data/spec/framework_spec/app/spec/library/net/http/http/get_print_spec.rb +2 -2
- data/spec/framework_spec/app/spec/library/net/http/http/get_response_spec.rb +2 -2
- data/spec/framework_spec/app/spec/library/net/http/http/get_spec.rb +3 -3
- data/spec/framework_spec/app/spec/library/net/http/http/head_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/initialize_spec.rb +2 -2
- data/spec/framework_spec/app/spec/library/net/http/http/inspect_spec.rb +4 -4
- data/spec/framework_spec/app/spec/library/net/http/http/lock_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/mkcol_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/move_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/new_spec.rb +7 -7
- data/spec/framework_spec/app/spec/library/net/http/http/newobj_spec.rb +2 -2
- data/spec/framework_spec/app/spec/library/net/http/http/options_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/port_spec.rb +2 -2
- data/spec/framework_spec/app/spec/library/net/http/http/post_form_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/post_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/propfind_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/proppatch_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/proxy_address_spec.rb +2 -2
- data/spec/framework_spec/app/spec/library/net/http/http/proxy_pass_spec.rb +3 -3
- data/spec/framework_spec/app/spec/library/net/http/http/proxy_port_spec.rb +3 -3
- data/spec/framework_spec/app/spec/library/net/http/http/proxy_user_spec.rb +3 -3
- data/spec/framework_spec/app/spec/library/net/http/http/put_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/request_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/send_request_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/set_debug_output_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/shared/request_get.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/shared/request_head.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/shared/request_post.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/shared/request_put.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/shared/started.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/start_spec.rb +8 -8
- data/spec/framework_spec/app/spec/library/net/http/http/trace_spec.rb +1 -1
- data/spec/framework_spec/app/spec/library/net/http/http/unlock_spec.rb +1 -1
- data/spec/framework_spec/app/spec_runner.rb +1 -1
- data/spec/framework_spec/build.yml +2 -2
- data/spec/phone_spec/app/spec/rhom_object_spec.rb +43 -2
- data/version +1 -1
- metadata +14 -5
@@ -1524,6 +1524,9 @@ module FileUtils
|
|
1524
1524
|
OPT_TABLE.keys.select {|m| OPT_TABLE[m].include?(opt) }
|
1525
1525
|
end
|
1526
1526
|
|
1527
|
+
#RHO does not support eval of ruby text only block
|
1528
|
+
=begin
|
1529
|
+
|
1527
1530
|
LOW_METHODS = singleton_methods(false) - collect_method(:noop).map(&:intern)
|
1528
1531
|
module LowMethods
|
1529
1532
|
module_eval("private\n" + ::FileUtils::LOW_METHODS.map {|name| "def #{name}(*)end"}.join("\n"),
|
@@ -1532,8 +1535,6 @@ module FileUtils
|
|
1532
1535
|
|
1533
1536
|
METHODS = singleton_methods() - [:private_module_function,
|
1534
1537
|
:commands, :options, :have_option?, :options_of, :collect_method]
|
1535
|
-
#RHO does not support eval of ruby text only block
|
1536
|
-
=begin
|
1537
1538
|
#
|
1538
1539
|
# This module has all methods of FileUtils module, but it outputs messages
|
1539
1540
|
# before acting. This equates to passing the <tt>:verbose</tt> flag to
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'hmac'
|
2
|
+
require 'digest/sha2'
|
3
|
+
|
4
|
+
module HMAC
|
5
|
+
class SHA256 < Base
|
6
|
+
def initialize(key = nil)
|
7
|
+
super(Digest::SHA256, 64, 32, key)
|
8
|
+
end
|
9
|
+
public_class_method :new, :digest, :hexdigest
|
10
|
+
end
|
11
|
+
|
12
|
+
class SHA384 < Base
|
13
|
+
def initialize(key = nil)
|
14
|
+
super(Digest::SHA384, 128, 48, key)
|
15
|
+
end
|
16
|
+
public_class_method :new, :digest, :hexdigest
|
17
|
+
end
|
18
|
+
|
19
|
+
class SHA512 < Base
|
20
|
+
def initialize(key = nil)
|
21
|
+
super(Digest::SHA512, 128, 64, key)
|
22
|
+
end
|
23
|
+
public_class_method :new, :digest, :hexdigest
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# Copyright (C) 2001 Daiki Ueno <ueno@unixuser.org>
|
2
|
+
# This library is distributed under the terms of the Ruby license.
|
3
|
+
|
4
|
+
# This module provides common interface to HMAC engines.
|
5
|
+
# HMAC standard is documented in RFC 2104:
|
6
|
+
#
|
7
|
+
# H. Krawczyk et al., "HMAC: Keyed-Hashing for Message Authentication",
|
8
|
+
# RFC 2104, February 1997
|
9
|
+
#
|
10
|
+
# These APIs are inspired by JCE 1.2's javax.crypto.Mac interface.
|
11
|
+
#
|
12
|
+
# <URL:http://java.sun.com/security/JCE1.2/spec/apidoc/javax/crypto/Mac.html>
|
13
|
+
#
|
14
|
+
# Source repository is at
|
15
|
+
#
|
16
|
+
# http://github.com/topfunky/ruby-hmac/tree/master
|
17
|
+
|
18
|
+
module HMAC
|
19
|
+
|
20
|
+
VERSION = '0.4.0'
|
21
|
+
|
22
|
+
class Base
|
23
|
+
def initialize(algorithm, block_size, output_length, key)
|
24
|
+
@algorithm = algorithm
|
25
|
+
@block_size = block_size
|
26
|
+
@output_length = output_length
|
27
|
+
@initialized = false
|
28
|
+
@key_xor_ipad = ''
|
29
|
+
@key_xor_opad = ''
|
30
|
+
set_key(key) unless key.nil?
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def check_status
|
35
|
+
unless @initialized
|
36
|
+
raise RuntimeError,
|
37
|
+
"The underlying hash algorithm has not yet been initialized."
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
public
|
42
|
+
def set_key(key)
|
43
|
+
# If key is longer than the block size, apply hash function
|
44
|
+
# to key and use the result as a real key.
|
45
|
+
key = @algorithm.digest(key) if key.size > @block_size
|
46
|
+
akey = key.unpack("C*")
|
47
|
+
key_xor_ipad = ("\x36" * @block_size).unpack("C*")
|
48
|
+
key_xor_opad = ("\x5C" * @block_size).unpack("C*")
|
49
|
+
for i in 0 .. akey.size - 1
|
50
|
+
key_xor_ipad[i] ^= akey[i]
|
51
|
+
key_xor_opad[i] ^= akey[i]
|
52
|
+
end
|
53
|
+
@key_xor_ipad = key_xor_ipad.pack("C*")
|
54
|
+
@key_xor_opad = key_xor_opad.pack("C*")
|
55
|
+
@md = @algorithm.new
|
56
|
+
@initialized = true
|
57
|
+
end
|
58
|
+
|
59
|
+
def reset_key
|
60
|
+
@key_xor_ipad.gsub!(/./, '?')
|
61
|
+
@key_xor_opad.gsub!(/./, '?')
|
62
|
+
@key_xor_ipad[0..-1] = ''
|
63
|
+
@key_xor_opad[0..-1] = ''
|
64
|
+
@initialized = false
|
65
|
+
end
|
66
|
+
|
67
|
+
def update(text)
|
68
|
+
check_status
|
69
|
+
# perform inner H
|
70
|
+
md = @algorithm.new
|
71
|
+
md.update(@key_xor_ipad)
|
72
|
+
md.update(text)
|
73
|
+
str = md.digest
|
74
|
+
# perform outer H
|
75
|
+
md = @algorithm.new
|
76
|
+
md.update(@key_xor_opad)
|
77
|
+
md.update(str)
|
78
|
+
@md = md
|
79
|
+
end
|
80
|
+
alias << update
|
81
|
+
|
82
|
+
def digest
|
83
|
+
check_status
|
84
|
+
@md.digest
|
85
|
+
end
|
86
|
+
|
87
|
+
def hexdigest
|
88
|
+
check_status
|
89
|
+
@md.hexdigest
|
90
|
+
end
|
91
|
+
alias to_s hexdigest
|
92
|
+
|
93
|
+
# These two class methods below are safer than using above
|
94
|
+
# instance methods combinatorially because an instance will have
|
95
|
+
# held a key even if it's no longer in use.
|
96
|
+
def Base.digest(key, text)
|
97
|
+
hmac = self.new(key)
|
98
|
+
begin
|
99
|
+
hmac.update(text)
|
100
|
+
hmac.digest
|
101
|
+
ensure
|
102
|
+
hmac.reset_key
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def Base.hexdigest(key, text)
|
107
|
+
hmac = self.new(key)
|
108
|
+
begin
|
109
|
+
hmac.update(text)
|
110
|
+
hmac.hexdigest
|
111
|
+
ensure
|
112
|
+
hmac.reset_key
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
private_class_method :new, :digest, :hexdigest
|
117
|
+
end
|
118
|
+
end
|
@@ -876,7 +876,7 @@ module Net #:nodoc:
|
|
876
876
|
the_body = r.read_body dest, &block
|
877
877
|
case r["content-encoding"]
|
878
878
|
when "gzip"
|
879
|
-
r.body= Zlib::GzipReader.new(StringIO.new(the_body), encoding
|
879
|
+
r.body= Zlib::GzipReader.new(StringIO.new(the_body), encoding => "ASCII-8BIT").read
|
880
880
|
r.delete("content-encoding")
|
881
881
|
when "deflate"
|
882
882
|
r.body= Zlib::Inflate.inflate(the_body);
|
data/lib/framework/rho/render.rb
CHANGED
@@ -164,7 +164,7 @@ module Rho
|
|
164
164
|
#rho_info 'render content: ' + @content.length.to_s
|
165
165
|
if xhr? and options[:use_layout_on_ajax] != true
|
166
166
|
options[:layout] = false
|
167
|
-
if @request["headers"]["Transition-Enabled"] == "true"
|
167
|
+
if options[:partial].nil? && @request["headers"]["Transition-Enabled"] == "true"
|
168
168
|
@content = "<div>#{@content}</div>"
|
169
169
|
end
|
170
170
|
elsif options[:layout].nil? or options[:layout] == true
|
@@ -247,7 +247,6 @@ public class RhodesActivity extends BaseActivity {
|
|
247
247
|
@Override
|
248
248
|
public void onStart() {
|
249
249
|
super.onStart();
|
250
|
-
RhodesService.rhodesActivityStarted(true);
|
251
250
|
|
252
251
|
Log.d(TAG, "RhodesActivity.onStart()");
|
253
252
|
mIsInsideStartStop = true;
|
@@ -278,15 +277,11 @@ public class RhodesActivity extends BaseActivity {
|
|
278
277
|
iterator.next().onPause(this);
|
279
278
|
}
|
280
279
|
}
|
281
|
-
|
282
|
-
RhodesApplication.stateChanged(RhodesApplication.UiState.MainActivityPaused);
|
283
|
-
|
284
|
-
RhodesService.rhodesActivityStarted(false);
|
285
280
|
|
286
281
|
super.onPause();
|
287
282
|
Log.d(TAG, "RhodesActivity.onPause()");
|
288
283
|
|
289
|
-
|
284
|
+
RhodesApplication.stateChanged(RhodesApplication.UiState.MainActivityPaused);
|
290
285
|
}
|
291
286
|
|
292
287
|
@Override
|
@@ -37,15 +37,50 @@ public class RhodesApplication extends Application{
|
|
37
37
|
|
38
38
|
private static final String TAG = RhodesApplication.class.getSimpleName();
|
39
39
|
private static Handler mHandler;
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
static {
|
41
|
+
NativeLibraries.load();
|
42
|
+
}
|
43
|
+
|
44
|
+
@Override
|
45
|
+
public void onCreate(){
|
46
|
+
super.onCreate();
|
47
|
+
|
48
|
+
RhodesApplication.runWhen(
|
49
|
+
UiState.MainActivityStarted,
|
50
|
+
new StateHandler(false) {
|
51
|
+
@Override
|
52
|
+
public void run() {
|
53
|
+
rhodesActivityStarted(true);
|
54
|
+
}
|
55
|
+
});
|
56
|
+
RhodesApplication.runWhen(
|
57
|
+
UiState.MainActivityPaused,
|
58
|
+
new StateHandler(false) {
|
59
|
+
@Override
|
60
|
+
public void run() {
|
61
|
+
if (isRhodesActivityStarted()) {
|
62
|
+
Logger.T(TAG, "callUiDestroyedCallback");
|
63
|
+
rhodesActivityStarted(false);
|
64
|
+
RhodesService.callUiDestroyedCallback();
|
65
|
+
}
|
66
|
+
}
|
67
|
+
});
|
68
|
+
}
|
69
|
+
private static boolean sRhodesActivityStarted = false;
|
70
|
+
|
71
|
+
synchronized
|
72
|
+
static void rhodesActivityStarted(boolean started) {
|
73
|
+
sRhodesActivityStarted = started;
|
74
|
+
}
|
75
|
+
|
76
|
+
synchronized
|
77
|
+
public static boolean isRhodesActivityStarted() { return sRhodesActivityStarted; }
|
43
78
|
|
44
79
|
private native static void createRhodesApp();
|
45
80
|
private native static void startRhodesApp();
|
46
81
|
private native static void stopRhodesApp();
|
47
82
|
private native static boolean canStartApp(String strCmdLine, String strSeparators);
|
48
|
-
|
83
|
+
|
49
84
|
public static void create()
|
50
85
|
{
|
51
86
|
if (sAppState != AppState.Undefined) {
|
@@ -56,13 +91,13 @@ public class RhodesApplication extends Application{
|
|
56
91
|
}
|
57
92
|
|
58
93
|
public static void start()
|
59
|
-
|
94
|
+
{
|
60
95
|
if (sAppState != AppState.Undefined) {
|
61
96
|
Logger.E(TAG, "Cannot start application it is already started!!!");
|
62
97
|
return;
|
63
98
|
}
|
64
|
-
|
65
|
-
|
99
|
+
startRhodesApp();
|
100
|
+
}
|
66
101
|
|
67
102
|
public static boolean canStart(String strCmdLine)
|
68
103
|
{
|
@@ -70,14 +105,23 @@ public class RhodesApplication extends Application{
|
|
70
105
|
}
|
71
106
|
|
72
107
|
public static void stop() {
|
73
|
-
|
108
|
+
Logger.T(TAG, "Stopping application");
|
74
109
|
mHandler = new Handler();
|
75
110
|
mHandler.postDelayed(new Runnable() {
|
76
111
|
public void run() {
|
112
|
+
Logger.T(TAG, "do stopRhodesApp");
|
77
113
|
stopRhodesApp();
|
114
|
+
try {
|
115
|
+
Logger.T(TAG, "do RhodesActivity.finish()");
|
116
|
+
RhodesActivity.safeGetInstance().finish();
|
117
|
+
} catch (Throwable e) {
|
118
|
+
// Just postpone
|
119
|
+
}
|
120
|
+
Logger.T(TAG, "send quit signal");
|
78
121
|
Process.sendSignal(Process.myPid(), Process.SIGNAL_QUIT);
|
79
122
|
mHandler.postDelayed(new Runnable() {
|
80
123
|
public void run() {
|
124
|
+
Logger.T(TAG, "send kill signal");
|
81
125
|
Process.killProcess(Process.myPid());
|
82
126
|
}
|
83
127
|
}, 500);
|
@@ -151,15 +151,6 @@ public class RhodesService extends Service {
|
|
151
151
|
private static boolean mCameraAvailable;
|
152
152
|
|
153
153
|
private static int sActivitiesActive;
|
154
|
-
private static boolean sRhodesActivityStarted = false;
|
155
|
-
|
156
|
-
synchronized
|
157
|
-
static void rhodesActivityStarted(boolean started) {
|
158
|
-
sRhodesActivityStarted = started;
|
159
|
-
}
|
160
|
-
|
161
|
-
synchronized
|
162
|
-
public static boolean isRhodesActivityStarted() { return sRhodesActivityStarted; }
|
163
154
|
|
164
155
|
private boolean mNeedGeoLocationRestart = false;
|
165
156
|
|
@@ -614,22 +605,24 @@ public class RhodesService extends Service {
|
|
614
605
|
}
|
615
606
|
|
616
607
|
public static void exit() {
|
608
|
+
Logger.I(TAG, "Exit application");
|
617
609
|
try {
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
610
|
+
// Do this fake state change in order to make processing before server is stopped
|
611
|
+
RhodesApplication.stateChanged(RhodesApplication.UiState.MainActivityPaused);
|
612
|
+
|
622
613
|
RhodesService service = RhodesService.getInstance();
|
623
614
|
if (service != null)
|
624
615
|
{
|
616
|
+
Logger.T(TAG, "stop RhodesService");
|
625
617
|
service.wakeLock.reset();
|
626
618
|
service.stopSelf();
|
627
619
|
}
|
628
620
|
|
621
|
+
Logger.T(TAG, "stop RhodesApplication");
|
629
622
|
RhodesApplication.stop();
|
630
623
|
}
|
631
624
|
catch (Exception e) {
|
632
|
-
Logger.E(TAG, e
|
625
|
+
Logger.E(TAG, e);
|
633
626
|
}
|
634
627
|
}
|
635
628
|
|
@@ -1430,7 +1423,7 @@ public class RhodesService extends Service {
|
|
1430
1423
|
}
|
1431
1424
|
|
1432
1425
|
public static void bringToFront() {
|
1433
|
-
if (isRhodesActivityStarted()) {
|
1426
|
+
if (RhodesApplication.isRhodesActivityStarted()) {
|
1434
1427
|
Logger.T(TAG, "Main activity is already at front, do nothing");
|
1435
1428
|
return;
|
1436
1429
|
}
|
@@ -45,7 +45,7 @@ public class PerformOnUiThread implements Runnable {
|
|
45
45
|
runnable.run();
|
46
46
|
}
|
47
47
|
catch (Exception e) {
|
48
|
-
Logger.E(TAG,
|
48
|
+
Logger.E(TAG, e);
|
49
49
|
}
|
50
50
|
finally {
|
51
51
|
synchronized (runnable) {
|
@@ -64,7 +64,7 @@ public class PerformOnUiThread implements Runnable {
|
|
64
64
|
RhodesActivity.safeGetInstance().post(r, delay);
|
65
65
|
}
|
66
66
|
catch (Exception e) {
|
67
|
-
Logger.E(TAG,
|
67
|
+
Logger.E(TAG, e);
|
68
68
|
setError(e);
|
69
69
|
}
|
70
70
|
}
|
@@ -88,7 +88,7 @@ public class PerformOnUiThread implements Runnable {
|
|
88
88
|
try {
|
89
89
|
RhodesActivity.safeGetInstance().post(r);
|
90
90
|
} catch (Exception e) {
|
91
|
-
Logger.E(TAG,
|
91
|
+
Logger.E(TAG, e);
|
92
92
|
setError(e);
|
93
93
|
}
|
94
94
|
}
|
@@ -117,8 +117,7 @@ public class PerformOnUiThread implements Runnable {
|
|
117
117
|
}
|
118
118
|
}
|
119
119
|
} catch (Exception e) {
|
120
|
-
Logger.E(TAG,
|
121
|
-
Thread.dumpStack();
|
120
|
+
Logger.E(TAG, e);
|
122
121
|
}
|
123
122
|
}
|
124
123
|
};
|
@@ -279,7 +279,9 @@ namespace "config" do
|
|
279
279
|
$current_platform = "android"
|
280
280
|
end
|
281
281
|
|
282
|
-
task :android =>
|
282
|
+
task :android => :set_android_platform do
|
283
|
+
|
284
|
+
Rake::Task["config:common"].invoke
|
283
285
|
|
284
286
|
$ext_android_rhodes_activity_listener = []
|
285
287
|
$ext_android_manifest_changes= []
|