rhodes 3.2.0.beta.5 → 3.2.0.beta.6
Sign up to get free protection for your applications and to get access to all the features.
- 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= []
|