Class: PackageConvertWorker

Inherits:
Object
  • Object
show all
Defined in:
lib/package_convert_worker.rb

Instance Method Summary collapse

Constructor Details

#initialize(new_app_name, new_package_name, dest_dir) ⇒ PackageConvertWorker

Returns a new instance of PackageConvertWorker.



4
5
6
7
8
9
10
11
12
13
14
# File 'lib/package_convert_worker.rb', line 4

def initialize(new_app_name, new_package_name, dest_dir)
  @new_app_name = new_app_name
  @new_package_name = new_package_name
  @dest_dir = dest_dir

  @target_manifest_file = "#@dest_dir/#{AndroidConstants.android_manifest}"

  @xml = REXML::Document.new(File.read @target_manifest_file)
  @manifest = @xml.root
  @original_package = @manifest.attributes["package"]
end

Instance Method Details

#convertObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/package_convert_worker.rb', line 16

def convert
  @manifest.attributes["package"] = @new_package_name

  update_app_label

  update_application_name

  update_activity_name

  update_layout_files_custom_name_space

  update_src_to_use_new_r

  update_jni

  File.open(@target_manifest_file, "w") do |data|
    data << @xml
  end
end

#full_name(package, basename) ⇒ Object



80
81
82
83
84
85
86
# File 'lib/package_convert_worker.rb', line 80

def full_name(package, basename)
  if basename.to_s.start_with? "." then
    package + basename
  else
    basename
  end
end

#update_activity_nameObject



67
68
69
70
71
72
# File 'lib/package_convert_worker.rb', line 67

def update_activity_name()
  @manifest.elements.each("application/activity") do |element|
    activity_name = element.attributes["android:name"]
    element.attributes["android:name"] = full_name(@original_package, activity_name)
  end
end

#update_app_labelObject



74
75
76
77
78
# File 'lib/package_convert_worker.rb', line 74

def update_app_label()
  @manifest.elements.each("application") do |element|
    element.attributes["android:label"] = @new_app_name unless @new_app_name.nil?
  end
end

#update_application_nameObject



36
37
38
39
40
41
42
# File 'lib/package_convert_worker.rb', line 36

def update_application_name()
  @manifest.elements.each("application") do |element|
    attribute = element.attributes.get_attribute "android:name"
    return if attribute.nil?
    element.attributes["android:name"] = full_name(@original_package, attribute.value)
  end
end

#update_jniObject



88
89
90
91
92
93
94
95
96
97
# File 'lib/package_convert_worker.rb', line 88

def update_jni
  Dir.glob ("#@dest_dir/jni/*.c") do |file|
    text = File.read(file)
    original_method_name = "#@original_package".gsub(".","_")
    new_method_name = "#@new_package_name".gsub(".","_")
    text.gsub!("_Included_#{original_method_name}", "_Included_#{new_method_name}")
    text.gsub!("Java_#{original_method_name}", "Java_#{new_method_name}")
    File.open(file, 'w') { |f| f.write(text) }
  end
end

#update_layout_files_custom_name_spaceObject



44
45
46
47
48
49
50
# File 'lib/package_convert_worker.rb', line 44

def update_layout_files_custom_name_space()
  Dir.glob ("#@dest_dir/res/**/*.xml") do |file|
    text = File.read(file)
    text.gsub!("http://schemas.android.com/apk/res/#@original_package", "http://schemas.android.com/apk/res/#@new_package_name")
    File.open(file, 'w') { |f| f.write(text) }
  end
end

#update_src_to_use_new_rObject



52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/package_convert_worker.rb', line 52

def update_src_to_use_new_r()
  Dir.glob ("#@dest_dir/src/**/*.java") do |file|
    text = File.read(file)
    text.gsub!("import #@original_package.R;", "import #@new_package_name.R;")
    File.open(file, 'w') { |f| f.write(text) }
  end

  Dir.glob ("#@dest_dir/src/#{@original_package.gsub(".", "/")}/*.java") do |file|
    text = File.read(file)
    next if text.include? "import #@new_package_name.R;"
    text.gsub!("package #@original_package;", "package #@original_package;\r\nimport #@new_package_name.R;")
    File.open(file, 'w') { |f| f.write(text) }
  end
end