cukunity 0.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.
- data/.document +5 -0
- data/.gitmodules +0 -0
- data/.rspec +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +60 -0
- data/LICENSE.txt +20 -0
- data/README.md +214 -0
- data/Rakefile +51 -0
- data/Unity/Assets/Demo/Art/Buttons/down.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/down.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/left.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/left.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/ok.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/ok.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/options.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/options.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/play.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/play.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/quit.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/quit.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/retry.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/retry.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/right.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/right.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/up.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/up.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons.meta +2 -0
- data/Unity/Assets/Demo/Art/clear.png +0 -0
- data/Unity/Assets/Demo/Art/clear.png.meta +28 -0
- data/Unity/Assets/Demo/Art/options.png +0 -0
- data/Unity/Assets/Demo/Art/options.png.meta +28 -0
- data/Unity/Assets/Demo/Art/sokoban.png +0 -0
- data/Unity/Assets/Demo/Art/sokoban.png.meta +28 -0
- data/Unity/Assets/Demo/Art.meta +2 -0
- data/Unity/Assets/Demo/Cubes/CrateCube.mat +0 -0
- data/Unity/Assets/Demo/Cubes/CrateCube.mat.meta +2 -0
- data/Unity/Assets/Demo/Cubes/CrateCube.prefab +0 -0
- data/Unity/Assets/Demo/Cubes/CrateCube.prefab.meta +2 -0
- data/Unity/Assets/Demo/Cubes/FloorCube.mat +0 -0
- data/Unity/Assets/Demo/Cubes/FloorCube.mat.meta +2 -0
- data/Unity/Assets/Demo/Cubes/FloorCube.prefab +0 -0
- data/Unity/Assets/Demo/Cubes/FloorCube.prefab.meta +2 -0
- data/Unity/Assets/Demo/Cubes/GoalCube.mat +0 -0
- data/Unity/Assets/Demo/Cubes/GoalCube.mat.meta +2 -0
- data/Unity/Assets/Demo/Cubes/GoalCube.prefab +0 -0
- data/Unity/Assets/Demo/Cubes/GoalCube.prefab.meta +2 -0
- data/Unity/Assets/Demo/Cubes/PlayerCube.mat +0 -0
- data/Unity/Assets/Demo/Cubes/PlayerCube.mat.meta +2 -0
- data/Unity/Assets/Demo/Cubes/PlayerCube.prefab +0 -0
- data/Unity/Assets/Demo/Cubes/PlayerCube.prefab.meta +2 -0
- data/Unity/Assets/Demo/Cubes/WallCube.mat +0 -0
- data/Unity/Assets/Demo/Cubes/WallCube.mat.meta +2 -0
- data/Unity/Assets/Demo/Cubes/WallCube.prefab +0 -0
- data/Unity/Assets/Demo/Cubes/WallCube.prefab.meta +2 -0
- data/Unity/Assets/Demo/Cubes.meta +2 -0
- data/Unity/Assets/Demo/Resources/MainMenu.prefab +0 -0
- data/Unity/Assets/Demo/Resources/MainMenu.prefab.meta +2 -0
- data/Unity/Assets/Demo/Resources/OptionsMenu.prefab +0 -0
- data/Unity/Assets/Demo/Resources/OptionsMenu.prefab.meta +2 -0
- data/Unity/Assets/Demo/Resources.meta +2 -0
- data/Unity/Assets/Demo/Scripts/CameraController.js +18 -0
- data/Unity/Assets/Demo/Scripts/CameraController.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/EnterPlayerName.js +21 -0
- data/Unity/Assets/Demo/Scripts/EnterPlayerName.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/GameLeftButton.js +18 -0
- data/Unity/Assets/Demo/Scripts/GameLeftButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/GameQuitButton.js +6 -0
- data/Unity/Assets/Demo/Scripts/GameQuitButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/GameRetryButton.js +7 -0
- data/Unity/Assets/Demo/Scripts/GameRetryButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/GameRightButton.js +18 -0
- data/Unity/Assets/Demo/Scripts/GameRightButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/GameUpButton.js +18 -0
- data/Unity/Assets/Demo/Scripts/GameUpButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/OnTouchGUIElementDown.js +34 -0
- data/Unity/Assets/Demo/Scripts/OnTouchGUIElementDown.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/PlayerData.js +3 -0
- data/Unity/Assets/Demo/Scripts/PlayerData.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/SokobanController.js +240 -0
- data/Unity/Assets/Demo/Scripts/SokobanController.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/TakeScreenShot.js +26 -0
- data/Unity/Assets/Demo/Scripts/TakeScreenShot.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/TitleOptionsButton.js +8 -0
- data/Unity/Assets/Demo/Scripts/TitleOptionsButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/TitleOptionsOkButton.js +8 -0
- data/Unity/Assets/Demo/Scripts/TitleOptionsOkButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/TitlePlayButton.js +6 -0
- data/Unity/Assets/Demo/Scripts/TitlePlayButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/TitleQuitButton.js +7 -0
- data/Unity/Assets/Demo/Scripts/TitleQuitButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/UpdateMovesLabel.js +26 -0
- data/Unity/Assets/Demo/Scripts/UpdateMovesLabel.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/UpdatePlayerName.js +14 -0
- data/Unity/Assets/Demo/Scripts/UpdatePlayerName.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts.meta +2 -0
- data/Unity/Assets/Demo/demo_game.unity +0 -0
- data/Unity/Assets/Demo/demo_game.unity.meta +2 -0
- data/Unity/Assets/Demo/demo_title.unity +0 -0
- data/Unity/Assets/Demo/demo_title.unity.meta +2 -0
- data/Unity/Assets/Demo.meta +2 -0
- data/Unity/Assets/Plugins/CukunityInstance.prefab +0 -0
- data/Unity/Assets/Plugins/CukunityInstance.prefab.meta +2 -0
- data/Unity/Assets/Plugins/CukunityServer.cs +871 -0
- data/Unity/Assets/Plugins/CukunityServer.cs.meta +2 -0
- data/Unity/Assets/Plugins/JsonFx.Json.dll +0 -0
- data/Unity/Assets/Plugins/JsonFx.Json.dll.meta +2 -0
- data/Unity/Assets/Plugins/iOS/CukunityServer.mm +242 -0
- data/Unity/Assets/Plugins/iOS/CukunityServer.mm.meta +2 -0
- data/Unity/Assets/Plugins/iOS.meta +2 -0
- data/Unity/Assets/Plugins.meta +2 -0
- data/Unity/Library/AudioManager.asset +0 -0
- data/Unity/Library/BuildSettings.asset +0 -0
- data/Unity/Library/DynamicsManager.asset +0 -0
- data/Unity/Library/EditorBuildSettings.asset +0 -0
- data/Unity/Library/EditorSettings.asset +0 -0
- data/Unity/Library/EditorUserBuildSettings.asset +0 -0
- data/Unity/Library/EditorUserSettings.asset +0 -0
- data/Unity/Library/InputManager.asset +0 -0
- data/Unity/Library/InspectorExpandedItems.asset +0 -0
- data/Unity/Library/MonoManager.asset +0 -0
- data/Unity/Library/NetworkManager.asset +0 -0
- data/Unity/Library/ProjectSettings.asset +0 -0
- data/Unity/Library/QualitySettings.asset +0 -0
- data/Unity/Library/TagManager.asset +0 -0
- data/Unity/Library/TimeManager.asset +0 -0
- data/Unity/ProjectSettings/AudioManager.asset +0 -0
- data/Unity/ProjectSettings/DynamicsManager.asset +0 -0
- data/Unity/ProjectSettings/EditorBuildSettings.asset +0 -0
- data/Unity/ProjectSettings/EditorSettings.asset +0 -0
- data/Unity/ProjectSettings/InputManager.asset +0 -0
- data/Unity/ProjectSettings/NavMeshLayers.asset +0 -0
- data/Unity/ProjectSettings/NetworkManager.asset +0 -0
- data/Unity/ProjectSettings/ProjectSettings.asset +0 -0
- data/Unity/ProjectSettings/QualitySettings.asset +0 -0
- data/Unity/ProjectSettings/TagManager.asset +0 -0
- data/Unity/ProjectSettings/TimeManager.asset +0 -0
- data/VERSION +1 -0
- data/bin/cukunity +7 -0
- data/cukunity.gemspec +298 -0
- data/features/get_scene_command.feature +39 -0
- data/features/i18n/ja/sokoban_clear.feature +109 -0
- data/features/install.feature +23 -0
- data/features/keyboard_input.feature +26 -0
- data/features/load_level_command.feature +36 -0
- data/features/run.feature +33 -0
- data/features/select_visible.feature +29 -0
- data/features/support/env.rb +11 -0
- data/features/touch_input.feature +96 -0
- data/lib/cukunity/cli/argument_parser.rb +103 -0
- data/lib/cukunity/cli/bootstrap_command.rb +39 -0
- data/lib/cukunity/cli/doctor_command.rb +150 -0
- data/lib/cukunity/cli/features_command.rb +35 -0
- data/lib/cukunity/cli/main.rb +18 -0
- data/lib/cukunity/cli/options.rb +8 -0
- data/lib/cukunity/cli.rb +11 -0
- data/lib/cukunity/cucumber/step_definitions/get_scene_command_steps.rb +37 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/get_scene_command_steps.rb +37 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/install_steps.rb +25 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/keyboard_input_steps.rb +17 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/load_level_command_steps.rb +17 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/run_steps.rb +25 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/select_visible_steps.rb +9 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/touch_input_steps.rb +19 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja.rb +9 -0
- data/lib/cukunity/cucumber/step_definitions/install_steps.rb +33 -0
- data/lib/cukunity/cucumber/step_definitions/keyboard_input_steps.rb +13 -0
- data/lib/cukunity/cucumber/step_definitions/load_level_command_steps.rb +17 -0
- data/lib/cukunity/cucumber/step_definitions/run_steps.rb +32 -0
- data/lib/cukunity/cucumber/step_definitions/select_visible_steps.rb +15 -0
- data/lib/cukunity/cucumber/step_definitions/touch_input_steps.rb +18 -0
- data/lib/cukunity/cucumber/support/platform_helpers.rb +105 -0
- data/lib/cukunity/cucumber/support/spec_helpers.rb +21 -0
- data/lib/cukunity/cucumber/support/transforms.rb +5 -0
- data/lib/cukunity/cucumber/support/unity_helpers.rb +35 -0
- data/lib/cukunity/cucumber.rb +28 -0
- data/lib/cukunity/drivers/android/app.rb +43 -0
- data/lib/cukunity/drivers/android/appkiller/.gitignore +9 -0
- data/lib/cukunity/drivers/android/appkiller/AndroidManifest.xml +17 -0
- data/lib/cukunity/drivers/android/appkiller/ant.properties +17 -0
- data/lib/cukunity/drivers/android/appkiller/build.xml +85 -0
- data/lib/cukunity/drivers/android/appkiller/proguard.cfg +40 -0
- data/lib/cukunity/drivers/android/appkiller/project.properties +11 -0
- data/lib/cukunity/drivers/android/appkiller/res/layout/main.xml +13 -0
- data/lib/cukunity/drivers/android/appkiller/res/values/strings.xml +4 -0
- data/lib/cukunity/drivers/android/appkiller/src/cukunity/appkiller/AppKiller.java +29 -0
- data/lib/cukunity/drivers/android/keyboard_input.rb +149 -0
- data/lib/cukunity/drivers/android/keycodes.rb +531 -0
- data/lib/cukunity/drivers/android/monkey_client.rb +65 -0
- data/lib/cukunity/drivers/android/process.rb +103 -0
- data/lib/cukunity/drivers/android/touch_input.rb +24 -0
- data/lib/cukunity/drivers/android/tunnel_client_methods.rb +22 -0
- data/lib/cukunity/drivers/android/unity_client.rb +27 -0
- data/lib/cukunity/drivers/android/utils.rb +50 -0
- data/lib/cukunity/drivers/android.rb +9 -0
- data/lib/cukunity/drivers/iOS/app.rb +32 -0
- data/lib/cukunity/drivers/iOS/keyboard_input.rb +104 -0
- data/lib/cukunity/drivers/iOS/process.rb +42 -0
- data/lib/cukunity/drivers/iOS/touch_input.rb +18 -0
- data/lib/cukunity/drivers/iOS/tunnel_client_methods.rb +27 -0
- data/lib/cukunity/drivers/iOS/uiautomation.rb +97 -0
- data/lib/cukunity/drivers/iOS/uiautomation_master.rb +152 -0
- data/lib/cukunity/drivers/iOS/uiautomation_slave.js +238 -0
- data/lib/cukunity/drivers/iOS/uiautomation_slave.rb +41 -0
- data/lib/cukunity/drivers/iOS/unity_client.rb +27 -0
- data/lib/cukunity/drivers/iOS/utils.rb +46 -0
- data/lib/cukunity/drivers/iOS.rb +9 -0
- data/lib/cukunity/exceptions.rb +24 -0
- data/lib/cukunity/keyboard_input_methods.rb +35 -0
- data/lib/cukunity/request_line_response_client_methods.rb +80 -0
- data/lib/cukunity/tasks/cucumber.rake +22 -0
- data/lib/cukunity/touch_input_methods.rb +19 -0
- data/lib/cukunity/unity/client_methods.rb +46 -0
- data/lib/cukunity/unity/command_facade.rb +67 -0
- data/lib/cukunity/unity/component.rb +39 -0
- data/lib/cukunity/unity/gameobject.rb +53 -0
- data/lib/cukunity/unity/hint.rb +27 -0
- data/lib/cukunity/unity/json_container.rb +48 -0
- data/lib/cukunity/unity/level.rb +6 -0
- data/lib/cukunity/unity/scene.rb +18 -0
- data/lib/cukunity/unity/screen.rb +45 -0
- data/lib/cukunity/unity/screen_hint_methods.rb +61 -0
- data/lib/cukunity/unity/text_hint_methods.rb +17 -0
- data/lib/cukunity/unity.rb +11 -0
- data/lib/cukunity/utils.rb +56 -0
- data/lib/cukunity.rb +19 -0
- metadata +411 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Cukunity
|
|
2
|
+
module SpecHelpers
|
|
3
|
+
def should(negation, target, *args)
|
|
4
|
+
if negation
|
|
5
|
+
target.should_not *args
|
|
6
|
+
else
|
|
7
|
+
target.should *args
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def should_equal(negation, target, arg)
|
|
12
|
+
if negation
|
|
13
|
+
target.should_not == arg
|
|
14
|
+
else
|
|
15
|
+
target.should == arg
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
World(Cukunity::SpecHelpers)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Cukunity
|
|
2
|
+
module UnityHelpers
|
|
3
|
+
extend Forwardable
|
|
4
|
+
def_delegator :unity, :screen
|
|
5
|
+
def_delegator :unity, :level
|
|
6
|
+
def_delegator :unity, :load_level
|
|
7
|
+
def_delegator :unity, :scene
|
|
8
|
+
def_delegator :unity, :gameobject
|
|
9
|
+
def_delegator :unity, :gameobjects
|
|
10
|
+
def_delegator :unity, :components
|
|
11
|
+
def_delegator :unity, :hints
|
|
12
|
+
def_delegator :unity, :hint
|
|
13
|
+
|
|
14
|
+
def unity
|
|
15
|
+
raise Exception::UnspecifiedPlatform.new if @platform.nil?
|
|
16
|
+
@platform::Unity::Client.instance
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
attr_accessor :current_object
|
|
20
|
+
|
|
21
|
+
attr_accessor :current_gameobject
|
|
22
|
+
def set_current_gameobject(gameobject)
|
|
23
|
+
self.current_object = gameobject
|
|
24
|
+
self.current_gameobject = gameobject
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
attr_accessor :current_component
|
|
28
|
+
def set_current_component(component)
|
|
29
|
+
self.current_object = component
|
|
30
|
+
self.current_component = component
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
World(Cukunity::UnityHelpers)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'cucumber'
|
|
4
|
+
require 'rspec/core'
|
|
5
|
+
require 'rspec/expectations'
|
|
6
|
+
|
|
7
|
+
require 'cukunity'
|
|
8
|
+
|
|
9
|
+
cucumber_dir = File.join(File.dirname(__FILE__), 'cucumber')
|
|
10
|
+
|
|
11
|
+
# helpers
|
|
12
|
+
Dir.glob(File.join(cucumber_dir, 'support', '**', '*.rb')) do |f|
|
|
13
|
+
require f
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# step_definitions
|
|
17
|
+
Dir.glob(File.join(cucumber_dir, 'step_definitions', '**', '*.rb')) do |f|
|
|
18
|
+
require f
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
at_exit do
|
|
22
|
+
# close connections, close pipes, remove temporary files, etc.
|
|
23
|
+
Cukunity::Android::Unity::Client.instance.close
|
|
24
|
+
Cukunity::Android::MonkeyClient.instance.close
|
|
25
|
+
Cukunity::IOS::Unity::Client.instance.close
|
|
26
|
+
Cukunity::IOS::UIAutomationMaster.instance.close
|
|
27
|
+
Cukunity::IOS::UIAutomation.instance.close
|
|
28
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Cukunity
|
|
2
|
+
module Android
|
|
3
|
+
module App
|
|
4
|
+
extend Android::Utils
|
|
5
|
+
extend Cukunity::Utils
|
|
6
|
+
|
|
7
|
+
def self.install(path, options = {})
|
|
8
|
+
options = merge_options(options, { :max_time => 30 })
|
|
9
|
+
output, status = adb ['install', '-r', path]
|
|
10
|
+
unless status.exited? and status.exitstatus == 0
|
|
11
|
+
raise Exception::InstallFailed.new
|
|
12
|
+
end
|
|
13
|
+
raise Exception::InstallTimeout.new if check_timeout(options[:max_time]) do
|
|
14
|
+
installed?(path)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.uninstall(path, options = {})
|
|
19
|
+
options = merge_options(options, { :max_time => 30 })
|
|
20
|
+
output, status = adb ['uninstall', package_name(path)]
|
|
21
|
+
unless status.exited? and status.exitstatus == 0
|
|
22
|
+
raise Exception::UninstallFailed.new
|
|
23
|
+
end
|
|
24
|
+
raise Exception::UninstallTimeout.new if check_timeout(options[:max_time]) do
|
|
25
|
+
not installed?(path)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.installed
|
|
30
|
+
shell('pm list packages').scan(/^package:(\S+)/).inject([]) do |packages, m|
|
|
31
|
+
packages << m[0]
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.installed?(path)
|
|
36
|
+
package = package_name(path).downcase
|
|
37
|
+
installed.any? do |p|
|
|
38
|
+
p.downcase == package
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
package="cukunity.appkiller"
|
|
4
|
+
android:versionCode="1"
|
|
5
|
+
android:versionName="1.0">
|
|
6
|
+
<application android:label="@string/app_name">
|
|
7
|
+
<activity android:name=".AppKiller"
|
|
8
|
+
android:label="@string/app_name">
|
|
9
|
+
<intent-filter>
|
|
10
|
+
<action android:name="android.intent.action.MAIN" />
|
|
11
|
+
<category android:name="android.intent.category.LAUNCHER" />
|
|
12
|
+
</intent-filter>
|
|
13
|
+
</activity>
|
|
14
|
+
</application>
|
|
15
|
+
<uses-sdk android:minSdkVersion="3" />
|
|
16
|
+
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
|
|
17
|
+
</manifest>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# This file is used to override default values used by the Ant build system.
|
|
2
|
+
#
|
|
3
|
+
# This file must be checked in Version Control Systems, as it is
|
|
4
|
+
# integral to the build system of your project.
|
|
5
|
+
|
|
6
|
+
# This file is only used by the Ant script.
|
|
7
|
+
|
|
8
|
+
# You can use this to override default values such as
|
|
9
|
+
# 'source.dir' for the location of your java source folder and
|
|
10
|
+
# 'out.dir' for the location of your output folder.
|
|
11
|
+
|
|
12
|
+
# You can also use it define how the release builds are signed by declaring
|
|
13
|
+
# the following properties:
|
|
14
|
+
# 'key.store' for the location of your keystore and
|
|
15
|
+
# 'key.alias' for the name of the key to use.
|
|
16
|
+
# The password will be asked during the build when you use the 'release' target.
|
|
17
|
+
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project name="AppKiller" default="help">
|
|
3
|
+
|
|
4
|
+
<!-- The local.properties file is created and updated by the 'android' tool.
|
|
5
|
+
It contains the path to the SDK. It should *NOT* be checked into
|
|
6
|
+
Version Control Systems. -->
|
|
7
|
+
<property file="local.properties" />
|
|
8
|
+
|
|
9
|
+
<!-- The ant.properties file can be created by you. It is only edited by the
|
|
10
|
+
'android' tool to add properties to it.
|
|
11
|
+
This is the place to change some Ant specific build properties.
|
|
12
|
+
Here are some properties you may want to change/update:
|
|
13
|
+
|
|
14
|
+
source.dir
|
|
15
|
+
The name of the source directory. Default is 'src'.
|
|
16
|
+
out.dir
|
|
17
|
+
The name of the output directory. Default is 'bin'.
|
|
18
|
+
|
|
19
|
+
For other overridable properties, look at the beginning of the rules
|
|
20
|
+
files in the SDK, at tools/ant/build.xml
|
|
21
|
+
|
|
22
|
+
Properties related to the SDK location or the project target should
|
|
23
|
+
be updated using the 'android' tool with the 'update' action.
|
|
24
|
+
|
|
25
|
+
This file is an integral part of the build system for your
|
|
26
|
+
application and should be checked into Version Control Systems.
|
|
27
|
+
|
|
28
|
+
-->
|
|
29
|
+
<property file="ant.properties" />
|
|
30
|
+
|
|
31
|
+
<!-- The project.properties file is created and updated by the 'android'
|
|
32
|
+
tool, as well as ADT.
|
|
33
|
+
|
|
34
|
+
This contains project specific properties such as project target, and library
|
|
35
|
+
dependencies. Lower level build properties are stored in ant.properties
|
|
36
|
+
(or in .classpath for Eclipse projects).
|
|
37
|
+
|
|
38
|
+
This file is an integral part of the build system for your
|
|
39
|
+
application and should be checked into Version Control Systems. -->
|
|
40
|
+
<loadproperties srcFile="project.properties" />
|
|
41
|
+
|
|
42
|
+
<!-- quick check on sdk.dir -->
|
|
43
|
+
<fail
|
|
44
|
+
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
|
|
45
|
+
unless="sdk.dir"
|
|
46
|
+
/>
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
<!-- extension targets. Uncomment the ones where you want to do custom work
|
|
50
|
+
in between standard targets -->
|
|
51
|
+
<!--
|
|
52
|
+
<target name="-pre-build">
|
|
53
|
+
</target>
|
|
54
|
+
<target name="-pre-compile">
|
|
55
|
+
</target>
|
|
56
|
+
|
|
57
|
+
/* This is typically used for code obfuscation.
|
|
58
|
+
Compiled code location: ${out.classes.absolute.dir}
|
|
59
|
+
If this is not done in place, override ${out.dex.input.absolute.dir} */
|
|
60
|
+
<target name="-post-compile">
|
|
61
|
+
</target>
|
|
62
|
+
-->
|
|
63
|
+
|
|
64
|
+
<!-- Import the actual build file.
|
|
65
|
+
|
|
66
|
+
To customize existing targets, there are two options:
|
|
67
|
+
- Customize only one target:
|
|
68
|
+
- copy/paste the target into this file, *before* the
|
|
69
|
+
<import> task.
|
|
70
|
+
- customize it to your needs.
|
|
71
|
+
- Customize the whole content of build.xml
|
|
72
|
+
- copy/paste the content of the rules files (minus the top node)
|
|
73
|
+
into this file, replacing the <import> task.
|
|
74
|
+
- customize to your needs.
|
|
75
|
+
|
|
76
|
+
***********************
|
|
77
|
+
****** IMPORTANT ******
|
|
78
|
+
***********************
|
|
79
|
+
In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
|
|
80
|
+
in order to avoid having your file be overridden by tools such as "android update project"
|
|
81
|
+
-->
|
|
82
|
+
<!-- version-tag: 1 -->
|
|
83
|
+
<import file="${sdk.dir}/tools/ant/build.xml" />
|
|
84
|
+
|
|
85
|
+
</project>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
-optimizationpasses 5
|
|
2
|
+
-dontusemixedcaseclassnames
|
|
3
|
+
-dontskipnonpubliclibraryclasses
|
|
4
|
+
-dontpreverify
|
|
5
|
+
-verbose
|
|
6
|
+
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
|
|
7
|
+
|
|
8
|
+
-keep public class * extends android.app.Activity
|
|
9
|
+
-keep public class * extends android.app.Application
|
|
10
|
+
-keep public class * extends android.app.Service
|
|
11
|
+
-keep public class * extends android.content.BroadcastReceiver
|
|
12
|
+
-keep public class * extends android.content.ContentProvider
|
|
13
|
+
-keep public class * extends android.app.backup.BackupAgentHelper
|
|
14
|
+
-keep public class * extends android.preference.Preference
|
|
15
|
+
-keep public class com.android.vending.licensing.ILicensingService
|
|
16
|
+
|
|
17
|
+
-keepclasseswithmembernames class * {
|
|
18
|
+
native <methods>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
-keepclasseswithmembers class * {
|
|
22
|
+
public <init>(android.content.Context, android.util.AttributeSet);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
-keepclasseswithmembers class * {
|
|
26
|
+
public <init>(android.content.Context, android.util.AttributeSet, int);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
-keepclassmembers class * extends android.app.Activity {
|
|
30
|
+
public void *(android.view.View);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
-keepclassmembers enum * {
|
|
34
|
+
public static **[] values();
|
|
35
|
+
public static ** valueOf(java.lang.String);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
-keep class * implements android.os.Parcelable {
|
|
39
|
+
public static final android.os.Parcelable$Creator *;
|
|
40
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# This file is automatically generated by Android Tools.
|
|
2
|
+
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
|
3
|
+
#
|
|
4
|
+
# This file must be checked in Version Control Systems.
|
|
5
|
+
#
|
|
6
|
+
# To customize properties used by the Ant build system use,
|
|
7
|
+
# "ant.properties", and override values to adapt the script to your
|
|
8
|
+
# project structure.
|
|
9
|
+
|
|
10
|
+
# Project target.
|
|
11
|
+
target=android-3
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
android:orientation="vertical"
|
|
4
|
+
android:layout_width="fill_parent"
|
|
5
|
+
android:layout_height="fill_parent"
|
|
6
|
+
>
|
|
7
|
+
<TextView
|
|
8
|
+
android:layout_width="fill_parent"
|
|
9
|
+
android:layout_height="wrap_content"
|
|
10
|
+
android:text="Hello World, AppKiller"
|
|
11
|
+
/>
|
|
12
|
+
</LinearLayout>
|
|
13
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
package cukunity.appkiller;
|
|
2
|
+
|
|
3
|
+
import android.app.Activity;
|
|
4
|
+
import android.os.Bundle;
|
|
5
|
+
import android.app.ActivityManager;
|
|
6
|
+
import android.util.Log;
|
|
7
|
+
|
|
8
|
+
public class AppKiller extends Activity
|
|
9
|
+
{
|
|
10
|
+
private static final String TAG = "AppKiller";
|
|
11
|
+
|
|
12
|
+
@Override
|
|
13
|
+
public void onCreate(Bundle savedInstanceState)
|
|
14
|
+
{
|
|
15
|
+
Bundle extras = getIntent().getExtras();
|
|
16
|
+
if (extras != null)
|
|
17
|
+
{
|
|
18
|
+
String pkg = extras.getString("package");
|
|
19
|
+
if ((pkg != null) && (pkg.length() > 0))
|
|
20
|
+
{
|
|
21
|
+
Log.d(TAG, "Restarting " + pkg);
|
|
22
|
+
ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
|
|
23
|
+
am.restartPackage(pkg);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
Log.d(TAG, "Killing self");
|
|
27
|
+
System.exit(0);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
module Cukunity
|
|
2
|
+
module Android
|
|
3
|
+
module KeyboardInput
|
|
4
|
+
extend Android::Utils
|
|
5
|
+
extend Cukunity::KeyboardInputMethods
|
|
6
|
+
|
|
7
|
+
def self.type_text(text, options = {})
|
|
8
|
+
text.to_s.scan(/[^ ]+| /) do |tokens|
|
|
9
|
+
if tokens == ' '
|
|
10
|
+
press_space
|
|
11
|
+
else
|
|
12
|
+
keyboard_command(options) do
|
|
13
|
+
%Q[type #{tokens}]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.press_key(code, options = {})
|
|
20
|
+
keyboard_command(options) do
|
|
21
|
+
"press #{keycode(code)}"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.key_down(code, options = {})
|
|
26
|
+
keyboard_command(options) do
|
|
27
|
+
"key down #{keycode(code)}"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.key_up(code, options = {})
|
|
32
|
+
keyboard_command(options) do
|
|
33
|
+
"key up #{keycode(code)}"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.press_done(options = {})
|
|
38
|
+
press_back(options)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.press_back(options = {})
|
|
42
|
+
press_key('Back', options)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.press_enter(options = {})
|
|
46
|
+
press_key('Enter', options)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def self.press_space(options = {})
|
|
50
|
+
press_key('Space', options)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.press_delete(options = {})
|
|
54
|
+
press_key('Del', options)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.dpad_up(options = {})
|
|
58
|
+
press_key('DPad Up', options)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.dpad_down(options = {})
|
|
62
|
+
press_key('DPad Down', options)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def self.dpad_left(options = {})
|
|
66
|
+
press_key('DPad Left', options)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.dpad_right(options = {})
|
|
70
|
+
press_key('DPad Right', options)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def self.dpad_center(options = {})
|
|
74
|
+
press_key('DPad Center', options)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def self.show_symbols
|
|
78
|
+
press_key('PictSymbols', options)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def self.methods
|
|
82
|
+
shell('dumpsys input_method').scan(/\smId=(\S+)\s/).flatten
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def self.method
|
|
86
|
+
shell('dumpsys input_method').match(/\smCurId=(\S+)\s/) do |m|
|
|
87
|
+
return m[1]
|
|
88
|
+
end
|
|
89
|
+
nil
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def self.method?(method2)
|
|
93
|
+
if method2.kind_of? Regexp
|
|
94
|
+
method.match(method2)
|
|
95
|
+
else
|
|
96
|
+
method.downcase == method2.downcase
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def self.choose_method(method2, options = {})
|
|
101
|
+
while not method?(method2)
|
|
102
|
+
press_key('Sym', options)
|
|
103
|
+
dpad_down(options)
|
|
104
|
+
dpad_center(options)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
private
|
|
109
|
+
def self.closed?
|
|
110
|
+
shell('dumpsys input_method').match(/\sfieldId=\d+\s/).nil?
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def self.platform_open_keyboard(options = {})
|
|
114
|
+
raise Exception::KeyboardWaitTimeout.new if check_timeout(10) do
|
|
115
|
+
!closed?
|
|
116
|
+
end
|
|
117
|
+
if options[:clear]
|
|
118
|
+
press_delete options
|
|
119
|
+
else
|
|
120
|
+
dpad_right
|
|
121
|
+
end
|
|
122
|
+
choose_method(options[:method], options) unless options[:method].nil?
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def self.platform_keyboard_command(options, *cmd)
|
|
126
|
+
monkey.command(*cmd)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# http://developer.android.com/reference/android/view/KeyEvent.html
|
|
130
|
+
def self.keycode(code)
|
|
131
|
+
code = code.to_s.strip
|
|
132
|
+
if code =~ /^\d+$/
|
|
133
|
+
code.to_i
|
|
134
|
+
else
|
|
135
|
+
code = code.gsub(/\s+/, '_').upcase
|
|
136
|
+
if code !~ /^KEYCODE_/
|
|
137
|
+
code = "KEYCODE_#{code}"
|
|
138
|
+
end
|
|
139
|
+
code = code.to_sym
|
|
140
|
+
if Cukunity::Android::KeyboardInput::KeyCodes.const_defined?(code)
|
|
141
|
+
Cukunity::Android::KeyboardInput::KeyCodes.const_get(code).to_i
|
|
142
|
+
else
|
|
143
|
+
raise ArgumentError.new("Keycode unknown for \"#{code}\"")
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|