package_converter 0.2
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/.gitignore +19 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +16 -0
- data/README.md +26 -0
- data/Rakefile +3 -0
- data/bin/package_converter +4 -0
- data/lib/android_constants.rb +5 -0
- data/lib/package_convert_worker.rb +98 -0
- data/lib/package_converter.rb +21 -0
- data/package_converter.gemspec +20 -0
- metadata +72 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
package_converter
|
2
|
+
==============================
|
3
|
+
|
4
|
+
a tool to help to change android package names
|
5
|
+
|
6
|
+
==============================
|
7
|
+
|
8
|
+
How to use
|
9
|
+
|
10
|
+
package_converter com.your.different.package "New_App_Name" YourAndroidProject/ [Dir_To_Put_Converted_Project]
|
11
|
+
|
12
|
+
Param Dir_To_Put_Converted_Project is optional, if ignore it, your converted project will be put in a dir named "converted"
|
13
|
+
|
14
|
+
|
15
|
+
* Example: package_converter com.your.different.package "New_App_Name" YourAndroidProject/
|
16
|
+
|
17
|
+
* You may need ruby 1.9.3 to run this tool.
|
18
|
+
|
19
|
+
|
20
|
+
Next step:
|
21
|
+
|
22
|
+
* support library project
|
23
|
+
* better documentation
|
24
|
+
* jni support
|
25
|
+
|
26
|
+
hanhaify@gmail.com
|
data/Rakefile
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
require "android_constants"
|
2
|
+
|
3
|
+
class PackageConvertWorker
|
4
|
+
def initialize(new_app_name, new_package_name, dest_dir)
|
5
|
+
@new_app_name = new_app_name
|
6
|
+
@new_package_name = new_package_name
|
7
|
+
@dest_dir = dest_dir
|
8
|
+
|
9
|
+
@target_manifest_file = "#@dest_dir/#{AndroidConstants.android_manifest}"
|
10
|
+
|
11
|
+
@xml = REXML::Document.new(File.read @target_manifest_file)
|
12
|
+
@manifest = @xml.root
|
13
|
+
@original_package = @manifest.attributes["package"]
|
14
|
+
end
|
15
|
+
|
16
|
+
def convert
|
17
|
+
@manifest.attributes["package"] = @new_package_name
|
18
|
+
|
19
|
+
update_app_label
|
20
|
+
|
21
|
+
update_application_name
|
22
|
+
|
23
|
+
update_activity_name
|
24
|
+
|
25
|
+
update_layout_files_custom_name_space
|
26
|
+
|
27
|
+
update_src_to_use_new_r
|
28
|
+
|
29
|
+
update_jni
|
30
|
+
|
31
|
+
File.open(@target_manifest_file, "w") do |data|
|
32
|
+
data << @xml
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def update_application_name()
|
37
|
+
@manifest.elements.each("application") do |element|
|
38
|
+
attribute = element.attributes.get_attribute "android:name"
|
39
|
+
return if attribute.nil?
|
40
|
+
element.attributes["android:name"] = full_name(@original_package, attribute.value)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def update_layout_files_custom_name_space()
|
45
|
+
Dir.glob ("#@dest_dir/res/**/*.xml") do |file|
|
46
|
+
text = File.read(file)
|
47
|
+
text.gsub!("http://schemas.android.com/apk/res/#@original_package", "http://schemas.android.com/apk/res/#@new_package_name")
|
48
|
+
File.open(file, 'w') { |f| f.write(text) }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def update_src_to_use_new_r()
|
53
|
+
Dir.glob ("#@dest_dir/src/**/*.java") do |file|
|
54
|
+
text = File.read(file)
|
55
|
+
text.gsub!("import #@original_package.R;", "import #@new_package_name.R;")
|
56
|
+
File.open(file, 'w') { |f| f.write(text) }
|
57
|
+
end
|
58
|
+
|
59
|
+
Dir.glob ("#@dest_dir/src/#{@original_package.gsub(".", "/")}/*.java") do |file|
|
60
|
+
text = File.read(file)
|
61
|
+
next if text.include? "import #@new_package_name.R;"
|
62
|
+
text.gsub!("package #@original_package;", "package #@original_package;\r\nimport #@new_package_name.R;")
|
63
|
+
File.open(file, 'w') { |f| f.write(text) }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def update_activity_name()
|
68
|
+
@manifest.elements.each("application/activity") do |element|
|
69
|
+
activity_name = element.attributes["android:name"]
|
70
|
+
element.attributes["android:name"] = full_name(@original_package, activity_name)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def update_app_label()
|
75
|
+
@manifest.elements.each("application") do |element|
|
76
|
+
element.attributes["android:label"] = @new_app_name unless @new_app_name.nil?
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def full_name(package, basename)
|
81
|
+
if basename.to_s.start_with? "." then
|
82
|
+
package + basename
|
83
|
+
else
|
84
|
+
basename
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def update_jni
|
89
|
+
Dir.glob ("#@dest_dir/jni/*.c") do |file|
|
90
|
+
text = File.read(file)
|
91
|
+
original_method_name = "#@original_package".gsub(".","_")
|
92
|
+
new_method_name = "#@new_package_name".gsub(".","_")
|
93
|
+
text.gsub!("_Included_#{original_method_name}", "_Included_#{new_method_name}")
|
94
|
+
text.gsub!("Java_#{original_method_name}", "Java_#{new_method_name}")
|
95
|
+
File.open(file, 'w') { |f| f.write(text) }
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "rexml/document"
|
2
|
+
require "fileutils"
|
3
|
+
require "android_constants"
|
4
|
+
require "package_convert_worker"
|
5
|
+
|
6
|
+
class PackageConverter
|
7
|
+
def self.convert (new_package_name, new_app_name, src_dir, dest_dir)
|
8
|
+
raise "New package name should not be null or empty" if new_package_name.nil? || new_package_name.empty?
|
9
|
+
raise "Cannot find the android manifest file" unless File.exist? "#{src_dir}/#{AndroidConstants.android_manifest}"
|
10
|
+
|
11
|
+
copy_files(src_dir, dest_dir)
|
12
|
+
|
13
|
+
PackageConvertWorker.new(new_app_name, new_package_name, dest_dir).convert
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
def self.copy_files(src_dir, dest_dir)
|
18
|
+
FileUtils.rm_rf dest_dir
|
19
|
+
FileUtils.cp_r src_dir, dest_dir
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
Gem::Specification.new do |gem|
|
6
|
+
gem.name = "package_converter"
|
7
|
+
gem.version = 0.2
|
8
|
+
gem.summary = %q{helps you change the android package name}
|
9
|
+
gem.authors = ["Han Qin"]
|
10
|
+
gem.email = %w(hanhaify@gmail.com)
|
11
|
+
gem.description = %q{a tool to help you change the android package name}
|
12
|
+
gem.homepage = "https://github.com/hanqin/package_converter"
|
13
|
+
|
14
|
+
gem.files = `git ls-files`.split($/)
|
15
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
16
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
|
+
gem.require_paths = %w(lib)
|
18
|
+
|
19
|
+
gem.add_development_dependency "rake", "~> 10.0.2"
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: package_converter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.2'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Han Qin
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-04-16 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 10.0.2
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 10.0.2
|
30
|
+
description: a tool to help you change the android package name
|
31
|
+
email:
|
32
|
+
- hanhaify@gmail.com
|
33
|
+
executables:
|
34
|
+
- package_converter
|
35
|
+
extensions: []
|
36
|
+
extra_rdoc_files: []
|
37
|
+
files:
|
38
|
+
- .gitignore
|
39
|
+
- Gemfile
|
40
|
+
- Gemfile.lock
|
41
|
+
- README.md
|
42
|
+
- Rakefile
|
43
|
+
- bin/package_converter
|
44
|
+
- lib/android_constants.rb
|
45
|
+
- lib/package_convert_worker.rb
|
46
|
+
- lib/package_converter.rb
|
47
|
+
- package_converter.gemspec
|
48
|
+
homepage: https://github.com/hanqin/package_converter
|
49
|
+
licenses: []
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options: []
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
requirements: []
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 1.8.24
|
69
|
+
signing_key:
|
70
|
+
specification_version: 3
|
71
|
+
summary: helps you change the android package name
|
72
|
+
test_files: []
|