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.
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
19
+ .idea/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in package_converter.gemspec
4
+ gemspec
@@ -0,0 +1,16 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ package_converter (0.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ rake (10.0.2)
10
+
11
+ PLATFORMS
12
+ ruby
13
+
14
+ DEPENDENCIES
15
+ package_converter!
16
+ rake (~> 10.0.2)
@@ -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
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require "bundler/gem_tasks"
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'package_converter'
4
+ PackageConverter.convert(ARGV[0], ARGV[1], ARGV[2], ARGV[3].nil? ? "converted" : ARGV[3])
@@ -0,0 +1,5 @@
1
+ module AndroidConstants
2
+ def self.android_manifest
3
+ "AndroidManifest.xml"
4
+ end
5
+ end
@@ -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: []