ruboto 1.0.3 → 1.1.0
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +1 -0
- data/RELEASE_CANDICATE_DOC.md +21 -8
- data/RELEASE_DOC.md +71 -27
- data/Rakefile +27 -25
- data/assets/rakelib/ruboto.rake +137 -21
- data/assets/rakelib/{stdlib.rake → ruboto.stdlib.rake} +80 -29
- data/assets/rakelib/{stdlib_dependencies.rb → ruboto.stdlib.rb} +18 -24
- data/assets/rakelib/{stdlib.yml → ruboto.stdlib.yml} +0 -0
- data/assets/ruboto.yml +28 -18
- data/assets/src/org/ruboto/DexDex.java +329 -0
- data/assets/src/org/ruboto/FrameworkHack.java +177 -0
- data/assets/src/org/ruboto/JRubyAdapter.java +28 -4
- data/assets/src/org/ruboto/ScriptLoader.java +1 -1
- data/assets/src/org/ruboto/SplashActivity.java +1 -2
- data/assets/src/ruboto/activity/reload.rb +1 -0
- data/assets/src/ruboto/activity.rb +11 -5
- data/assets/src/ruboto/util/toast.rb +2 -2
- data/lib/ruboto/commands/base.rb +85 -37
- data/lib/ruboto/util/emulator.rb +32 -14
- data/lib/ruboto/util/setup.rb +34 -12
- data/lib/ruboto/util/update.rb +70 -40
- data/lib/ruboto/version.rb +1 -1
- data/test/activity/navigation_activity_test.rb +2 -0
- data/test/activity/ssl_activity.rb +26 -9
- data/test/activity/ssl_activity_test.rb +14 -6
- data/test/app_test_methods.rb +8 -3
- data/test/ruboto_gen_test.rb +13 -7
- data/test/ruboto_setup_test.rb +21 -0
- data/test/ruboto_update_test.rb +26 -28
- data/test/test_helper.rb +25 -21
- metadata +10 -7
@@ -5,13 +5,13 @@ require 'rexml/document'
|
|
5
5
|
namespace :libs do
|
6
6
|
desc 'take a fresh copy of the stdlib and rebuild it for use with this project'
|
7
7
|
task :reconfigure_stdlib do
|
8
|
-
require_relative '
|
8
|
+
require_relative 'ruboto.stdlib'
|
9
9
|
reconfigure_jruby_stdlib
|
10
10
|
end
|
11
11
|
|
12
12
|
desc 'check the stdlib dependencies and store them in auto_dependencies.yml'
|
13
13
|
task :check_dependencies do
|
14
|
-
require_relative '
|
14
|
+
require_relative 'ruboto.stdlib'
|
15
15
|
|
16
16
|
if File.exists? 'auto_dependencies.yml'
|
17
17
|
old_dep = (YAML::load_file('auto_dependencies.yml') || {})
|
@@ -22,20 +22,20 @@ namespace :libs do
|
|
22
22
|
puts "Dependencies haven't changed: #{new_dep.join(', ')}"
|
23
23
|
else
|
24
24
|
puts "New dependencies: #{new_dep.join(', ')}"
|
25
|
-
File.open(
|
26
|
-
YAML.dump(
|
25
|
+
File.open('auto_dependencies.yml', 'w') do |out|
|
26
|
+
YAML.dump(new_dep, out)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
def log_action(initial_text, final_text=
|
32
|
+
def log_action(initial_text, final_text='Done.', &block)
|
33
33
|
$stdout.sync = true
|
34
34
|
|
35
|
-
print initial_text,
|
35
|
+
print initial_text, '...'
|
36
36
|
result = yield
|
37
37
|
puts final_text
|
38
|
-
|
38
|
+
|
39
39
|
result
|
40
40
|
end
|
41
41
|
|
@@ -46,12 +46,14 @@ end
|
|
46
46
|
|
47
47
|
# - Moves ruby stdlib to the root of the jruby-stdlib jar
|
48
48
|
def reconfigure_jruby_stdlib
|
49
|
-
abort
|
50
|
-
|
49
|
+
abort 'cannot find jruby library in libs' if Dir['libs/jruby*'].empty?
|
50
|
+
if (gem_version = ENV['JRUBY_JARS_VERSION'])
|
51
|
+
gem('jruby-jars', gem_version)
|
52
|
+
end
|
51
53
|
require 'jruby-jars'
|
52
54
|
|
53
55
|
log_action("Copying #{JRubyJars::stdlib_jar_path} to libs") { FileUtils.cp JRubyJars::stdlib_jar_path, "libs/jruby-stdlib-#{JRubyJars::VERSION}.jar" }
|
54
|
-
StdlibDependencies.load('rakelib/stdlib.yml')
|
56
|
+
StdlibDependencies.load('rakelib/ruboto.stdlib.yml')
|
55
57
|
|
56
58
|
Dir.chdir 'libs' do
|
57
59
|
jruby_stdlib = Dir['jruby-stdlib-*.jar'][-1]
|
@@ -92,7 +94,7 @@ def remove_unneeded_parts_of_stdlib
|
|
92
94
|
included_stdlibs = ruboto_config['included_stdlibs']
|
93
95
|
excluded_stdlibs = [*ruboto_config['excluded_stdlibs']].compact
|
94
96
|
|
95
|
-
if included_stdlibs
|
97
|
+
if included_stdlibs == 'auto'
|
96
98
|
if File.exists? '../../auto_dependencies.yml'
|
97
99
|
included_stdlibs = YAML::load_file('../../auto_dependencies.yml')
|
98
100
|
else
|
@@ -140,15 +142,15 @@ def remove_unneeded_parts_of_stdlib
|
|
140
142
|
end
|
141
143
|
end
|
142
144
|
end
|
143
|
-
|
144
|
-
|
145
|
-
if included_stdlibs.nil? and excluded_stdlibs.any?
|
145
|
+
elsif excluded_stdlibs.any?
|
146
146
|
# Don't allow jruby and java to be removed
|
147
|
-
excluded_stdlibs
|
148
|
-
|
147
|
+
excluded_stdlibs -= %w(jruby java)
|
149
148
|
ruby_stdlib_versions = Dir['*'] - %w(gems)
|
150
|
-
|
151
|
-
|
149
|
+
excluded_stdlibs.each do |d|
|
150
|
+
if Dir["{#{ruby_stdlib_versions.join(',')}}/#{d}"].empty?
|
151
|
+
puts "Exclude pattern #{dir.inspect} does not match any files."
|
152
|
+
end
|
153
|
+
ruby_stdlib_versions.each do |ld|
|
152
154
|
dir = "#{ld}/#{d}"
|
153
155
|
FileUtils.rm_rf dir if File.exists? dir
|
154
156
|
file = "#{dir}.rb"
|
@@ -157,11 +159,22 @@ def remove_unneeded_parts_of_stdlib
|
|
157
159
|
end
|
158
160
|
print "excluded #{excluded_stdlibs.join(' ')}..."
|
159
161
|
end
|
162
|
+
|
163
|
+
# Corrects bug in krypt that loads FFI.
|
164
|
+
# Only affects JRuby 1.7.11, 1.7.12, and 9000 (until fixed).
|
165
|
+
# FIXME(uwe): Remove when we stop supporting JRuby 1.7.11 and 1.7.12
|
166
|
+
Dir['**/provider.rb'].each do |f|
|
167
|
+
puts "Patching #{f}..."
|
168
|
+
File.write(f, File.read(f).sub(%r{require_relative 'provider/ffi'}, "# require_relative 'provider/ffi'"))
|
169
|
+
end
|
170
|
+
# EMXIF
|
171
|
+
|
160
172
|
end
|
161
173
|
end
|
162
174
|
|
163
175
|
def cleanup_jars
|
164
176
|
Dir.chdir 'new' do
|
177
|
+
cmd_line_jar_found = false
|
165
178
|
Dir['**/*.jar'].each do |j|
|
166
179
|
|
167
180
|
# FIXME(uwe): Installing bcmail-jdk15-146.jar + bcprov-jdk15-146.jar fails due to
|
@@ -174,23 +187,31 @@ def cleanup_jars
|
|
174
187
|
# EMXIF
|
175
188
|
|
176
189
|
# FIXME(uwe): Adding the jars triggers the "LinearAlloc exceeded capacity"
|
177
|
-
# bug in Android
|
178
|
-
abort
|
190
|
+
# bug in Android 4.0. Remove when we stop supporting android-15 and older
|
191
|
+
abort 'cannot find your AndroidManifest.xml to extract info from it' unless File.exists? '../../../AndroidManifest.xml'
|
179
192
|
manifest = REXML::Document.new(File.read('../../../AndroidManifest.xml')).root
|
180
193
|
min_sdk_version = manifest.elements['uses-sdk'].attributes['android:minSdkVersion'].to_i
|
181
|
-
if min_sdk_version <=
|
194
|
+
if min_sdk_version <= 15
|
182
195
|
FileUtils.rm j
|
196
|
+
cmd_line_jar_found = true
|
183
197
|
next
|
184
198
|
end
|
185
199
|
# EMXIF
|
186
200
|
|
187
|
-
# FIXME(uwe):
|
188
|
-
if j =~ /
|
201
|
+
# FIXME(uwe): Duplicate in JRuby <=1.7.12. Remove when we stop supporting JRuby 1.7.12.
|
202
|
+
if j =~ /bc.*147/
|
189
203
|
FileUtils.rm j
|
190
204
|
next
|
191
205
|
end
|
192
206
|
# EMXIF
|
193
207
|
|
208
|
+
# Command line option libraries not needed
|
209
|
+
if j =~ /jline|readline/
|
210
|
+
cmd_line_jar_found = true
|
211
|
+
FileUtils.rm j
|
212
|
+
next
|
213
|
+
end
|
214
|
+
|
194
215
|
print "#{File.basename(j).chomp('.jar')}..."
|
195
216
|
system "jar xf #{j}"
|
196
217
|
FileUtils.rm j
|
@@ -221,6 +242,32 @@ def cleanup_jars
|
|
221
242
|
public
|
222
243
|
Java::json.ext.ParserService.new.basicLoad(JRuby.runtime)
|
223
244
|
END_CODE
|
245
|
+
elsif j =~ %r{jopenssl.jar$}
|
246
|
+
jar_load_code = <<-END_CODE
|
247
|
+
require 'jruby'
|
248
|
+
puts 'Starting JOpenSSL Service'
|
249
|
+
public
|
250
|
+
# Java::JopensslService.new.basicLoad(JRuby.runtime)
|
251
|
+
require 'java'
|
252
|
+
# remove the original bouncycastle provider of Android (com.android.org.bouncycastle.jce.provider)
|
253
|
+
java.security.Security.removeProvider("BC")
|
254
|
+
# add the new one used by jopenssl
|
255
|
+
java.security.Security.addProvider( org.bouncycastle.jce.provider.BouncyCastleProvider.new )
|
256
|
+
END_CODE
|
257
|
+
elsif j =~ %r{kryptproviderjdk.jar$}
|
258
|
+
jar_load_code = <<-END_CODE
|
259
|
+
require 'jruby'
|
260
|
+
puts 'Starting JRuby KryptproviderjdkService Service'
|
261
|
+
public
|
262
|
+
Java::KryptproviderjdkService.new.basicLoad(JRuby.runtime)
|
263
|
+
END_CODE
|
264
|
+
elsif j =~ %r{kryptcore.jar$}
|
265
|
+
jar_load_code = <<-END_CODE
|
266
|
+
require 'jruby'
|
267
|
+
puts 'Starting JRuby KryptcoreService Service'
|
268
|
+
public
|
269
|
+
Java::KryptcoreService.new.basicLoad(JRuby.runtime)
|
270
|
+
END_CODE
|
224
271
|
else
|
225
272
|
jar_load_code = ''
|
226
273
|
end
|
@@ -228,6 +275,9 @@ def cleanup_jars
|
|
228
275
|
File.open("#{j}.rb", 'w') { |f| f << jar_load_code }
|
229
276
|
File.open("#{j}.jar.rb", 'w') { |f| f << jar_load_code }
|
230
277
|
end
|
278
|
+
unless cmd_line_jar_found
|
279
|
+
puts "\nWARNING: No command line jar filtered. Has it changed?"
|
280
|
+
end
|
231
281
|
end
|
232
282
|
end
|
233
283
|
|
@@ -242,10 +292,10 @@ def find_dependencies
|
|
242
292
|
else
|
243
293
|
ruboto_config = {}
|
244
294
|
end
|
245
|
-
ruby_version = ruboto_config['ruby_version'] ||
|
295
|
+
ruby_version = ruboto_config['ruby_version'] || '1.9'
|
246
296
|
|
247
|
-
local = StdlibDependencies.collect(
|
248
|
-
stdlib = StdlibDependencies.load('rakelib/stdlib.yml')[ruby_version]
|
297
|
+
local = StdlibDependencies.collect('src').dependencies
|
298
|
+
stdlib = StdlibDependencies.load('rakelib/ruboto.stdlib.yml')[ruby_version]
|
249
299
|
|
250
300
|
dependencies = local.values.flatten
|
251
301
|
new_values = []
|
@@ -253,7 +303,7 @@ def find_dependencies
|
|
253
303
|
|
254
304
|
while check_values.any?
|
255
305
|
check_values.each do |j|
|
256
|
-
new_values += stdlib[j] if stdlib[j]
|
306
|
+
new_values += stdlib[j] if stdlib[j]
|
257
307
|
end
|
258
308
|
|
259
309
|
check_values = new_values - dependencies
|
@@ -261,6 +311,7 @@ def find_dependencies
|
|
261
311
|
new_values = []
|
262
312
|
end
|
263
313
|
|
264
|
-
dependencies.
|
265
|
-
end
|
314
|
+
dependencies.reject! { |f| File.exists? "src/#{f}.rb" }
|
266
315
|
|
316
|
+
dependencies.map { |d| d.split('/')[0] }.uniq.sort
|
317
|
+
end
|
@@ -6,7 +6,7 @@
|
|
6
6
|
class StdlibDependencies
|
7
7
|
attr_reader :dependencies, :version
|
8
8
|
|
9
|
-
REQUIRE = %r{^\s*require[ (]['"]([a-zA-Z0-9
|
9
|
+
REQUIRE = %r{^\s*require[ (]['"]([a-zA-Z0-9/_-]+)["'][)]?\s*$}
|
10
10
|
REQUIRE_RELATIVE = %r{^\s*require_relative[ (]['"]([a-zA-Z0-9/-_]+)["'][)]?\s*$}
|
11
11
|
|
12
12
|
def self.[](key)
|
@@ -17,20 +17,20 @@ class StdlibDependencies
|
|
17
17
|
@@versions ||= {}
|
18
18
|
end
|
19
19
|
|
20
|
-
def self.collect(dir=
|
21
|
-
local = new(
|
22
|
-
Dir.chdir(dir) do
|
23
|
-
local.check_dir([
|
20
|
+
def self.collect(dir='.')
|
21
|
+
local = new('app')
|
22
|
+
Dir.chdir(dir) do
|
23
|
+
local.check_dir(['ruboto'])
|
24
24
|
end
|
25
25
|
local
|
26
26
|
end
|
27
27
|
|
28
|
-
def self.generate(dir=
|
28
|
+
def self.generate(dir='.')
|
29
29
|
versions
|
30
30
|
|
31
31
|
Dir.chdir(dir) do
|
32
|
-
raise("Can't find shared directory") unless File.directory?(
|
33
|
-
Dir[
|
32
|
+
raise("Can't find shared directory") unless File.directory?('shared')
|
33
|
+
Dir['*'].select{|d| File.directory?(d) && d != 'shared'}.each do |d|
|
34
34
|
@@versions[d] = new(d).generate
|
35
35
|
end
|
36
36
|
end
|
@@ -40,14 +40,9 @@ class StdlibDependencies
|
|
40
40
|
|
41
41
|
def self.dump(file)
|
42
42
|
require 'yaml'
|
43
|
-
|
44
43
|
all_dependencies = {}
|
45
44
|
versions.each{|k, v| all_dependencies[k] = v.dependencies}
|
46
|
-
|
47
|
-
File.open( file, 'w' ) do |out|
|
48
|
-
YAML.dump( all_dependencies, out )
|
49
|
-
end
|
50
|
-
|
45
|
+
File.open(file, 'w') { |out| YAML.dump(all_dependencies, out) }
|
51
46
|
versions
|
52
47
|
end
|
53
48
|
|
@@ -55,10 +50,10 @@ class StdlibDependencies
|
|
55
50
|
require 'yaml'
|
56
51
|
|
57
52
|
@@versions = {}
|
58
|
-
raise("Can't find #{file}") unless File.exists?(file)
|
53
|
+
raise("Can't find #{file}") unless File.exists?(file)
|
59
54
|
|
60
|
-
File.open(file) do |
|
61
|
-
YAML.load(
|
55
|
+
File.open(file) do |f|
|
56
|
+
YAML.load(f).each{|k,v| @@versions[k] = new(k, v)}
|
62
57
|
end
|
63
58
|
|
64
59
|
versions
|
@@ -74,10 +69,10 @@ class StdlibDependencies
|
|
74
69
|
end
|
75
70
|
|
76
71
|
def generate
|
77
|
-
raise("Can't find shared directory") unless File.directory?(
|
78
|
-
raise("Can't find #{@version} directory") unless File.directory?(@version)
|
72
|
+
raise("Can't find shared directory") unless File.directory?('shared')
|
73
|
+
raise("Can't find #{@version} directory") unless File.directory?(@version)
|
79
74
|
|
80
|
-
Dir.chdir(
|
75
|
+
Dir.chdir('shared'){check_dir}
|
81
76
|
Dir.chdir(@version){check_dir}
|
82
77
|
|
83
78
|
# Clean up dependencies
|
@@ -85,10 +80,10 @@ class StdlibDependencies
|
|
85
80
|
# remove duplicates
|
86
81
|
@dependencies[i] = @dependencies[i].uniq
|
87
82
|
|
88
|
-
# remove references to self
|
83
|
+
# remove references to self
|
89
84
|
@dependencies[i] = @dependencies[i] - [i]
|
90
85
|
|
91
|
-
# sort
|
86
|
+
# sort
|
92
87
|
@dependencies[i] = @dependencies[i].sort
|
93
88
|
end
|
94
89
|
|
@@ -128,9 +123,8 @@ class StdlibDependencies
|
|
128
123
|
end
|
129
124
|
|
130
125
|
def check_dir(exclude=[])
|
131
|
-
Dir[
|
126
|
+
Dir['**/*.rb'].select{|rb| not exclude.include?(rb.split('/')[0])}.each do |i|
|
132
127
|
gather_dependencies(i)
|
133
128
|
end
|
134
129
|
end
|
135
130
|
end
|
136
|
-
|
File without changes
|
data/assets/ruboto.yml
CHANGED
@@ -13,11 +13,11 @@
|
|
13
13
|
#
|
14
14
|
# ruby_version
|
15
15
|
#
|
16
|
-
# Sets the jruby.compat.version property
|
17
|
-
# If you include the jruby jars, this is used to
|
16
|
+
# Sets the jruby.compat.version property for JRuby 1.7.x.
|
17
|
+
# If you include the jruby jars, this is also used to
|
18
18
|
# trim away unused versions of the stdlib.
|
19
19
|
#
|
20
|
-
#ruby_version: 1.9
|
20
|
+
# ruby_version: 1.9
|
21
21
|
|
22
22
|
###################################
|
23
23
|
#
|
@@ -44,19 +44,29 @@
|
|
44
44
|
# Note: If you specify included_stdlibs above,
|
45
45
|
# this information will be ingnored.
|
46
46
|
#
|
47
|
-
#excluded_stdlibs:
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
47
|
+
# excluded_stdlibs:
|
48
|
+
# - ant
|
49
|
+
# - cgi
|
50
|
+
# - drb
|
51
|
+
# - erb
|
52
|
+
# - gauntlet_rdoc
|
53
|
+
# - minitest
|
54
|
+
# - profiler
|
55
|
+
# - rake
|
56
|
+
# - rdoc
|
57
|
+
# - shell
|
58
|
+
# - test
|
59
|
+
# - webrick
|
60
|
+
# - win32
|
61
|
+
# - Win32API
|
62
62
|
|
63
|
+
###################################
|
64
|
+
#
|
65
|
+
# multi_dex
|
66
|
+
#
|
67
|
+
# Switch on use of multiple classes.dex files when building.
|
68
|
+
# This will allow you to have more than 65535 methods in your app.
|
69
|
+
# WARNING: This disables pre-dex during build which will increase your
|
70
|
+
# incremental build time substantially.
|
71
|
+
#
|
72
|
+
# multi_dex: true
|