118 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
|     include_once dirname(__FILE__) . "/ApkStream.php";
 | |
| 
 | |
|     /**
 | |
|     * Customized ZipArchive for .apk files.
 | |
|     * @author Tufan Baris YILDIRIM 
 | |
|     * @TODO  Add ->getResource('file_name'), or getIcon() directly.
 | |
|     * @todo Override the // extractTo() method. Rewrite all of XML files converted from Binary Xml to text based XML!
 | |
|     */
 | |
|     class ApkArchive extends ZipArchive
 | |
|     {
 | |
|         /**
 | |
|         * @var string
 | |
|         */
 | |
|         private $filePath;
 | |
| 
 | |
|         /**
 | |
|         * @var string
 | |
|         */
 | |
|         private $fileName;
 | |
| 
 | |
| 
 | |
|         public function __construct($file = false)
 | |
|         {
 | |
|             if($file && is_file($file))
 | |
|             {
 | |
|                 $this->open($file);
 | |
|                 $this->fileName = basename($this->filePath = $file);
 | |
|             }
 | |
|             else
 | |
|                 throw new Exception($file . " not a regular file");
 | |
| 
 | |
|         } 
 | |
| 
 | |
|         /**
 | |
|         * Get a file from apk Archive by name.
 | |
|         * 
 | |
|         * @param string $name
 | |
|         * @param int $length
 | |
|         * @param int $flags
 | |
|         * @return mixed
 | |
|         */
 | |
|         public function getFromName($name,$length = NULL,$flags = NULL)
 | |
|         {
 | |
|             if(strtolower(substr($name,-4)) == '.xml')
 | |
|             {
 | |
|                 $xmlParser = new ApkXmlParser(new ApkStream($this->getStream($name)));
 | |
|                 return $xmlParser->getXmlString();
 | |
|             }
 | |
|             else 
 | |
|                 return parent::getFromName($name,$length,$flags);
 | |
|         }                
 | |
| 
 | |
|         /**
 | |
|         * Returns an ApkStream whick contains AndroidManifest.xml
 | |
|         * @return ApkStream
 | |
|         */
 | |
|         public function getManifestStream()
 | |
|         {
 | |
|             return new ApkStream($this->getStream('AndroidManifest.xml'));
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * Apk file path.
 | |
|         * @return string  
 | |
|         */
 | |
|         public function getApkPath()
 | |
|         {
 | |
|             return $this->filePath; 
 | |
|         }
 | |
| 
 | |
|         /**
 | |
|         * Apk file name
 | |
|         * @return string
 | |
|         */
 | |
|         public function getApkName()
 | |
|         {
 | |
|             return $this->fileName;
 | |
|         }
 | |
| 
 | |
| 
 | |
|         public function extractTo($destination,$entries = NULL)
 | |
|         {
 | |
|             if($extResult = parent::extractTo($destination,$entries))
 | |
|             {
 | |
|                 //TODO: ApkXmlParser can not parse the main.xml and others! only AndroidManifest.xml
 | |
|                 //return $extResult;
 | |
| 
 | |
|                 $xmlFiles = $this->glob_recursive($destination . '/*.xml');
 | |
| 
 | |
| 
 | |
|                 foreach($xmlFiles as $xmlFile)
 | |
|                 {
 | |
|                     // TODO : Remove this ifcheck , if ApkXml can parse! amk!
 | |
|                    if($xmlFile == "AndroidManifest.xml")
 | |
|                         ApkXmlParser::decompressFile($xmlFile);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return $extResult;
 | |
| 
 | |
|         }
 | |
| 
 | |
|         // Can Move to the Utils(???) class.
 | |
|         private function glob_recursive($pattern, $flags = 0)
 | |
|         {
 | |
|             $files = glob($pattern, $flags);
 | |
| 
 | |
|             foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir)
 | |
|             {
 | |
|                 $files = array_merge($files, $this->glob_recursive($dir.'/'.basename($pattern), $flags));
 | |
|             }
 | |
| 
 | |
|             return $files;
 | |
|         }
 | |
| 
 | |
|     }
 |