269 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
|     include_once dirname(__FILE__). '/ApkXml.php';
 | |
|     include_once dirname(__FILE__). '/ApkManifestXmlElement.php';
 | |
|     include_once dirname(__FILE__). '/ApkAndroidPlatform.php';
 | |
| 
 | |
|     /**
 | |
|     * ApkManifest
 | |
|     * -- description is coming.
 | |
|     * 
 | |
|     * @todo  Add getPackageName();
 | |
|     * @todo  Add getVersion();
 | |
|     * @todo  Add getUsesSdk();
 | |
|     * @todo  Add getMinSdk();
 | |
|     */
 | |
|     class ApkManifest extends ApkXml
 | |
|     {
 | |
|         /**
 | |
|         * @var ApkXmlParser
 | |
|         */
 | |
|         private $xmlParser;
 | |
| 
 | |
|         private $attrs = null;
 | |
| 
 | |
|         public function __construct(ApkXmlParser $xmlParser)
 | |
|         {
 | |
|             $this->xmlParser = $xmlParser;    
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * Returns ManifestXml as a String.
 | |
|         * @return string
 | |
|         */
 | |
|         public function getXmlString()
 | |
|         {
 | |
|             return $this->xmlParser->getXmlString();
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * Get Application Permissions
 | |
|         * @return array
 | |
|         */
 | |
|         public function getPermissions()
 | |
|         {
 | |
|             return $this->getXmlObject()->getPermissions();
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * Android Package Name
 | |
|         * @return string
 | |
|         */
 | |
|         public function getPackageName()
 | |
|         {                                       
 | |
|             return $this->getAttribute('package');
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * Application Version Name
 | |
|         * @return string
 | |
|         */
 | |
|         public function getVersionName()
 | |
|         {                                                        
 | |
|             return $this->getAttribute('versionName');
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * Application Version Code
 | |
|         * @return mixed
 | |
|         */
 | |
|         public function getVersionCode()
 | |
|         {   
 | |
|             return hexdec( $this->getAttribute('versionCode') ); 
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * @return bool
 | |
|         */
 | |
|         public function isDebuggable()
 | |
|         {                                                        
 | |
|             return (bool)$this->getAttribute('debuggable');
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * The minimum API Level required for the application to run.
 | |
|         * @return int
 | |
|         */
 | |
|         public function getMinSdkLevel()
 | |
|         {  
 | |
|             $xmlObj     = $this->getXmlObject();
 | |
|             $usesSdk    = get_object_vars($xmlObj->{'uses-sdk'});
 | |
|             return hexdec($usesSdk['@attributes']['minSdkVersion']); 
 | |
|         }
 | |
| 
 | |
|         private function getAttribute($attributeName)
 | |
|         {
 | |
|             if($this->attrs === NULL)
 | |
|             {
 | |
|                 $xmlObj     = $this->getXmlObject();
 | |
|                 $vars = get_object_vars($xmlObj->attributes());
 | |
|                 $this->attrs =  $vars['@attributes'];
 | |
|             }
 | |
| 
 | |
|             if(!isset($this->attrs[$attributeName]))
 | |
|                 throw new Exception("Attribute not found : " . $attributeName);
 | |
| 
 | |
|             return $this->attrs[$attributeName];
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * More Information About The minimum API Level required for the application to run.
 | |
|         * @return ApkAndroidPlatform
 | |
|         */
 | |
|         public function getMinSdk()
 | |
|         {
 | |
|             return new ApkAndroidPlatform($this->getMinSdkLevel()); 
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * get SimleXmlElement created from AndroidManifest.xml
 | |
|         * 
 | |
|         * @param mixed $className
 | |
|         * @return ApkManifestXmlElement
 | |
|         */
 | |
|         public function getXmlObject($className = 'ApkManifestXmlElement')
 | |
|         {
 | |
|             return $this->xmlParser->getXmlObject($className);
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * Basically string casting method.
 | |
|         */
 | |
|         public function __toString()
 | |
|         {
 | |
|             return $this->getXmlString();
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * Android Permissions list 
 | |
|         * @see http://developer.android.com/reference/android/Manifest.permission.html
 | |
|         * 
 | |
|         * @todo: Move to {lang}_perms.php file, for easly translations.
 | |
|         * @var mixed
 | |
|         */
 | |
|         public static $permissions =     array(
 | |
|             'ACCESS_CHECKIN_PROPERTIES'     =>   'Allows read/write access to the "properties" table in the checkin database, to change values that get uploaded.',
 | |
|             'ACCESS_COARSE_LOCATION'        =>   'Allows an application to access coarse (e.g., Cell-ID, WiFi) location',
 | |
|             'ACCESS_FINE_LOCATION'          =>   'Allows an application to access fine (e.g., GPS) location',
 | |
|             'ACCESS_LOCATION_EXTRA_COMMANDS'  =>   'Allows an application to access extra location provider commands',
 | |
|             'ACCESS_MOCK_LOCATION'  =>   'Allows an application to create mock location providers for testing',
 | |
|             'ACCESS_NETWORK_STATE'  =>   'Allows applications to access information about networks',
 | |
|             'ACCESS_SURFACE_FLINGER'  =>   'Allows an application to use SurfaceFlinger\'s low level features',
 | |
|             'ACCESS_WIFI_STATE'  =>   'Allows applications to access information about Wi-Fi networks',
 | |
|             'ACCOUNT_MANAGER'  =>   'Allows applications to call into AccountAuthenticators.',
 | |
|             'ADD_VOICEMAIL'  =>   'Allows an application to add voicemails into the system.',
 | |
|             'AUTHENTICATE_ACCOUNTS'  =>   'Allows an application to act as an AccountAuthenticator for the AccountManager',
 | |
|             'BATTERY_STATS'  =>   'Allows an application to collect battery statistics',
 | |
|             'BIND_APPWIDGET'  =>   'Allows an application to tell the AppWidget service which application can access AppWidget\'s data.',
 | |
|             'BIND_DEVICE_ADMIN'  =>   'Must be required by device administration receiver, to ensure that only the system can interact with it.',
 | |
|             'BIND_INPUT_METHOD'  =>   'Must be required by an InputMethodService, to ensure that only the system can bind to it.',
 | |
|             'BIND_REMOTEVIEWS'  =>   'Must be required by a RemoteViewsService, to ensure that only the system can bind to it.',
 | |
|             'BIND_TEXT_SERVICE'  =>   'Must be required by a TextService (e.g.',
 | |
|             'BIND_VPN_SERVICE'  =>   'Must be required by an VpnService, to ensure that only the system can bind to it.',
 | |
|             'BIND_WALLPAPER'  =>   'Must be required by a WallpaperService, to ensure that only the system can bind to it.',
 | |
|             'BLUETOOTH'  =>   'Allows applications to connect to paired bluetooth devices',
 | |
|             'BLUETOOTH_ADMIN'  =>   'Allows applications to discover and pair bluetooth devices',
 | |
|             'BRICK'  =>   'Required to be able to disable the device (very dangerous!).',
 | |
|             'BROADCAST_PACKAGE_REMOVED'  =>   'Allows an application to broadcast a notification that an application package has been removed.',
 | |
|             'BROADCAST_SMS'  =>   'Allows an application to broadcast an SMS receipt notification',
 | |
|             'BROADCAST_STICKY'  =>   'Allows an application to broadcast sticky intents.',
 | |
|             'BROADCAST_WAP_PUSH'  =>   'Allows an application to broadcast a WAP PUSH receipt notification',
 | |
|             'CALL_PHONE'  =>   'Allows an application to initiate a phone call without going through the Dialer user interface for the user to confirm the call being placed.',
 | |
|             'CALL_PRIVILEGED'  =>   'Allows an application to call any phone number, including emergency numbers, without going through the Dialer user interface for the user to confirm the call being placed.',
 | |
|             'CAMERA'  =>   'Required to be able to access the camera device.',
 | |
|             'CHANGE_COMPONENT_ENABLED_STATE'  =>   'Allows an application to change whether an application component (other than its own) is enabled or not.',
 | |
|             'CHANGE_CONFIGURATION'  =>   'Allows an application to modify the current configuration, such as locale.',
 | |
|             'CHANGE_NETWORK_STATE'  =>   'Allows applications to change network connectivity state',
 | |
|             'CHANGE_WIFI_MULTICAST_STATE'  =>   'Allows applications to enter Wi-Fi Multicast mode',
 | |
|             'CHANGE_WIFI_STATE'  =>   'Allows applications to change Wi-Fi connectivity state',
 | |
|             'CLEAR_APP_CACHE'  =>   'Allows an application to clear the caches of all installed applications on the device.',
 | |
|             'CLEAR_APP_USER_DATA'  =>   'Allows an application to clear user data',
 | |
|             'CONTROL_LOCATION_UPDATES'  =>   'Allows enabling/disabling location update notifications from the radio.',
 | |
|             'DELETE_CACHE_FILES'  =>   'Allows an application to delete cache files.',
 | |
|             'DELETE_PACKAGES'  =>   'Allows an application to delete packages.',
 | |
|             'DEVICE_POWER'  =>   'Allows low-level access to power management',
 | |
|             'DIAGNOSTIC'  =>   'Allows applications to RW to diagnostic resources.',
 | |
|             'DISABLE_KEYGUARD'  =>   'Allows applications to disable the keyguard',
 | |
|             'DUMP'  =>   'Allows an application to retrieve state dump information from system services.',
 | |
|             'EXPAND_STATUS_BAR'  =>   'Allows an application to expand or collapse the status bar.',
 | |
|             'FACTORY_TEST'  =>   'Run as a manufacturer test application, running as the root user.',
 | |
|             'FLASHLIGHT'  =>   'Allows access to the flashlight',
 | |
|             'FORCE_BACK'  =>   'Allows an application to force a BACK operation on whatever is the top activity.',
 | |
|             'GET_ACCOUNTS'  =>   'Allows access to the list of accounts in the Accounts Service',
 | |
|             'GET_PACKAGE_SIZE'  =>   'Allows an application to find out the space used by any package.',
 | |
|             'GET_TASKS'  =>   'Allows an application to get information about the currently or recently running tasks: a thumbnail representation of the tasks, what activities are running in it, etc.',
 | |
|             'GLOBAL_SEARCH'  =>   'This permission can be used on content providers to allow the global search system to access their data.',
 | |
|             'HARDWARE_TEST'  =>   'Allows access to hardware peripherals.',
 | |
|             'INJECT_EVENTS'  =>   'Allows an application to inject user events (keys, touch, trackball) into the event stream and deliver them to ANY window.',
 | |
|             'INSTALL_LOCATION_PROVIDER'  =>   'Allows an application to install a location provider into the Location Manager',
 | |
|             'INSTALL_PACKAGES'  =>   'Allows an application to install packages.',
 | |
|             'INTERNAL_SYSTEM_WINDOW'  =>   'Allows an application to open windows that are for use by parts of the system user interface.',
 | |
|             'INTERNET'  =>   'Allows applications to open network sockets.',
 | |
|             'KILL_BACKGROUND_PROCESSES'  =>   'Allows an application to call killBackgroundProcesses(String).',
 | |
|             'MANAGE_ACCOUNTS'  =>   'Allows an application to manage the list of accounts in the AccountManager',
 | |
|             'MANAGE_APP_TOKENS'  =>   'Allows an application to manage (create, destroy, Z-order) application tokens in the window manager.',
 | |
|             'MASTER_CLEAR'  =>   '',
 | |
|             'MODIFY_AUDIO_SETTINGS'  =>   'Allows an application to modify global audio settings',
 | |
|             'MODIFY_PHONE_STATE'  =>   'Allows modification of the telephony state - power on, mmi, etc.',
 | |
|             'MOUNT_FORMAT_FILESYSTEMS'  =>   'Allows formatting file systems for removable storage.',
 | |
|             'MOUNT_UNMOUNT_FILESYSTEMS'  =>   'Allows mounting and unmounting file systems for removable storage.',
 | |
|             'NFC'  =>   'Allows applications to perform I/O operations over NFC',
 | |
|             'PERSISTENT_ACTIVITY'  =>   'This constant is deprecated. This functionality will be removed in the future; please do not use. Allow an application to make its activities persistent.',
 | |
|             'PROCESS_OUTGOING_CALLS'  =>   'Allows an application to monitor, modify, or abort outgoing calls.',
 | |
|             'READ_CALENDAR'  =>   'Allows an application to read the user\'s calendar data.',
 | |
|             'READ_CONTACTS'  =>   'Allows an application to read the user\'s contacts data.',
 | |
|             'READ_FRAME_BUFFER'  =>   'Allows an application to take screen shots and more generally get access to the frame buffer data',
 | |
|             'READ_HISTORY_BOOKMARKS'  =>   'Allows an application to read (but not write) the user\'s browsing history and bookmarks.',
 | |
|             'READ_INPUT_STATE'  =>   'Allows an application to retrieve the current state of keys and switches.',
 | |
|             'READ_LOGS'  =>   'Allows an application to read the low-level system log files.',
 | |
|             'READ_PHONE_STATE'  =>   'Allows read only access to phone state.',
 | |
|             'READ_PROFILE'  =>   'Allows an application to read the user\'s personal profile data.',
 | |
|             'READ_SMS'  =>   'Allows an application to read SMS messages.',
 | |
|             'READ_SOCIAL_STREAM'  =>   'Allows an application to read from the user\'s social stream.',
 | |
|             'READ_SYNC_SETTINGS'  =>   'Allows applications to read the sync settings',
 | |
|             'READ_SYNC_STATS'  =>   'Allows applications to read the sync stats',
 | |
|             'REBOOT'  =>   'Required to be able to reboot the device.',
 | |
|             'RECEIVE_BOOT_COMPLETED'  =>   'Allows an application to receive the ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting.',
 | |
|             'RECEIVE_MMS'  =>   'Allows an application to monitor incoming MMS messages, to record or perform processing on them.',
 | |
|             'RECEIVE_SMS'  =>   'Allows an application to monitor incoming SMS messages, to record or perform processing on them.',
 | |
|             'RECEIVE_WAP_PUSH'  =>   'Allows an application to monitor incoming WAP push messages.',
 | |
|             'RECORD_AUDIO'  =>   'Allows an application to record audio',
 | |
|             'REORDER_TASKS'  =>   'Allows an application to change the Z-order of tasks',
 | |
|             'RESTART_PACKAGES'  =>   'This constant is deprecated. The restartPackage(String) API is no longer supported.',
 | |
|             'SEND_SMS'  =>   'Allows an application to send SMS messages.',
 | |
|             'SET_ACTIVITY_WATCHER'  =>   'Allows an application to watch and control how activities are started globally in the system.',
 | |
|             'SET_ALARM'  =>   'Allows an application to broadcast an Intent to set an alarm for the user.',
 | |
|             'SET_ALWAYS_FINISH'  =>   'Allows an application to control whether activities are immediately finished when put in the background.',
 | |
|             'SET_ANIMATION_SCALE'  =>   'Modify the global animation scaling factor.',
 | |
|             'SET_DEBUG_APP'  =>   'Configure an application for debugging.',
 | |
|             'SET_ORIENTATION'  =>   'Allows low-level access to setting the orientation (actually rotation) of the screen.',
 | |
|             'SET_POINTER_SPEED'  =>   'Allows low-level access to setting the pointer speed.',
 | |
|             'SET_PREFERRED_APPLICATIONS'  =>   'This constant is deprecated. No longer useful, see addPackageToPreferred(String) for details.',
 | |
|             'SET_PROCESS_LIMIT'  =>   'Allows an application to set the maximum number of (not needed) application processes that can be running.',
 | |
|             'SET_TIME'  =>   'Allows applications to set the system time',
 | |
|             'SET_TIME_ZONE'  =>   'Allows applications to set the system time zone',
 | |
|             'SET_WALLPAPER'  =>   'Allows applications to set the wallpaper',
 | |
|             'SET_WALLPAPER_HINTS'  =>   'Allows applications to set the wallpaper hints',
 | |
|             'SIGNAL_PERSISTENT_PROCESSES'  =>   'Allow an application to request that a signal be sent to all persistent processes',
 | |
|             'STATUS_BAR'  =>   'Allows an application to open, close, or disable the status bar and its icons.',
 | |
|             'SUBSCRIBED_FEEDS_READ'  =>   'Allows an application to allow access the subscribed feeds ContentProvider.',
 | |
|             'SUBSCRIBED_FEEDS_WRITE'  =>   '',
 | |
|             'SYSTEM_ALERT_WINDOW'  =>   'Allows an application to open windows using the type TYPE_SYSTEM_ALERT, shown on top of all other applications.',
 | |
|             'UPDATE_DEVICE_STATS'  =>   'Allows an application to update device statistics.',
 | |
|             'USE_CREDENTIALS'  =>   'Allows an application to request authtokens from the AccountManager',
 | |
|             'USE_SIP'  =>   'Allows an application to use SIP service',
 | |
|             'VIBRATE'  =>   'Allows access to the vibrator',
 | |
|             'WAKE_LOCK'  =>   'Allows using PowerManager WakeLocks to keep processor from sleeping or screen from dimming',
 | |
|             'WRITE_APN_SETTINGS'  =>   'Allows applications to write the apn settings',
 | |
|             'WRITE_CALENDAR'  =>   'Allows an application to write (but not read) the user\'s calendar data.',
 | |
|             'WRITE_CONTACTS'  =>   'Allows an application to write (but not read) the user\'s contacts data.',
 | |
|             'WRITE_EXTERNAL_STORAGE'  =>   'Allows an application to write to external storage',
 | |
|             'WRITE_GSERVICES'  =>   'Allows an application to modify the Google service map.',
 | |
|             'WRITE_HISTORY_BOOKMARKS'  =>   'Allows an application to write (but not read) the user\'s browsing history and bookmarks.',
 | |
|             'WRITE_PROFILE'  =>   'Allows an application to write (but not read) the user\'s personal profile data.',
 | |
|             'WRITE_SECURE_SETTINGS'  =>   'Allows an application to read or write the secure system settings.',
 | |
|             'WRITE_SETTINGS'  =>   'Allows an application to read or write the system settings.',
 | |
|             'WRITE_SMS'  =>   'Allows an application to write SMS messages.',
 | |
|             'WRITE_SOCIAL_STREAM'  =>   'Allows an application to write (but not read) the user\'s social stream data.',
 | |
|             'WRITE_SYNC_SETTINGS'  =>   'Allows applications to write the sync settings'
 | |
|         );
 | |
| } |