cukunity 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|