111 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/php -q
 | |
| <?php
 | |
| 
 | |
| class APKInfo {
 | |
|     const AAPT_BIN = '/opt/android-sdk/platform-tools/aapt';
 | |
|     private $dir;
 | |
|     private $icon_dir;
 | |
|     private $xml_file;
 | |
|     private $dom;
 | |
|     private $dom_root;
 | |
| 
 | |
|     public static function saveIcon( $apk, $filename ) {
 | |
|         $info = self::getInfo( $apk );
 | |
|         if ( $info === false ) return false;
 | |
|         $ext = substr( $info['application']['icon'], strrpos( $info['application']['icon'], '.' ) );
 | |
|         $src = 'zip://' . $info['file'] . '#' . $info['application']['icon'];
 | |
|         copy( $src, $filename );
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     public static function getInfo( $file ) {
 | |
|         if ( !file_exists( $file ) ) return false;
 | |
|         exec( self::AAPT_BIN . ' d badging "' . $file . '"', $out );
 | |
|         $ainfo = array(
 | |
|             'file' => $file,
 | |
|             'size' => filesize( $file ),
 | |
|             'md5'  => md5_file( $file ),
 | |
|             'date' => date( 'Y-m-d', filemtime( $file ) ),
 | |
|         );
 | |
|         foreach ( $out as $line ) {
 | |
|             if ( strpos( $line, ':' ) === false ) continue;   // skip empty data keys
 | |
|             list( $label, $data ) = explode( ':', $line, 2 );
 | |
|             if ( $data{0} == "'" ) {
 | |
|                 // simple string
 | |
|                 $data = substr( $data, 1, -1 );
 | |
|             } elseif ( $data{0} == ' ' ) {
 | |
|                 // looks like array
 | |
| 
 | |
|                 // parse array parts
 | |
|                 $data_parts = array();
 | |
|                 $part = '';
 | |
|                 $in_string = false;
 | |
|                 for ($i=0;$i<strlen($data);$i++) {
 | |
|                     if ( $data{$i} == "'" ) {
 | |
|                         $in_string = !$in_string;
 | |
|                         $part .= $data{$i};
 | |
|                     } elseif ( $data{$i} == ' ' && !$in_string ) {
 | |
|                         if ( !empty($part) ) $data_parts[] = $part;
 | |
|                         $part = '';
 | |
|                     } else {
 | |
|                         $part .= $data{$i};
 | |
|                     }
 | |
|                 }
 | |
|                 if ( !empty( $part ) ) $data_parts[] = $part;
 | |
| 
 | |
|                 $data = array();
 | |
|                 foreach ( $data_parts as $dp ) {
 | |
|                     if ( empty( $dp ) ) continue;
 | |
|                     if ( $dp{0} == "'" ) {
 | |
|                         // array: 'val1' 'val2' 'val3'
 | |
|                         $data[] = substr( $dp, 1, -1 );
 | |
|                     } else {
 | |
|                         if ( strpos( $dp, '=' ) === false ) continue;
 | |
|                         // hash: name1='val1' name2='val2' name3='val3'
 | |
|                         list( $dp_name, $dp_value ) = explode( '=', $dp, 2 );
 | |
|                         $data[ $dp_name ] = substr( $dp_value, 1, -1 );
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if ( isset( $ainfo[ $label ] ) ) {
 | |
|                 // key already defined
 | |
|                 if ( !is_array( $ainfo[ $label ] ) ) {
 | |
|                     // convert current value to array
 | |
|                     $ainfo[ $label ] = array( $ainfo[ $label ] );
 | |
|                 }
 | |
|                 if ( is_array( $data ) ) {
 | |
|                     // merge arrays
 | |
|                     $ainfo[ $label ] = array_merge( $ainfo[ $label ], $data );
 | |
|                 } else {
 | |
|                     // just add new value
 | |
|                     $ainfo[ $label ][] = $data;
 | |
|                 }
 | |
|             } else {
 | |
|                 // new key=value pair
 | |
|                 $ainfo[ $label ] = $data;
 | |
|             }
 | |
|         }
 | |
|         return $ainfo;
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| $files = glob( './*.apk' );
 | |
| foreach ( $files as $file ) {
 | |
|     $info = APKInfo::getInfo( $file );
 | |
|     $bname = basename( $file );
 | |
|     $newname = $info['package']['name'] . '-' . $info['package']['versionCode'] . '-v' . $info['package']['versionName'] . '.apk';
 | |
|     if ( $newname != $bname ) {
 | |
|         echo $bname . ' -> ' . $newname . ' ';
 | |
|         $result = rename( $file, dirname($file) . '/' . $newname );
 | |
|         if ( $result ) echo '[OK]'; else echo '[ERROR!]';
 | |
|         echo PHP_EOL;
 | |
|     } else {
 | |
|         echo $bname . ' skipped.' . PHP_EOL;
 | |
|     }
 | |
| }
 | |
| 
 | |
| exit;
 | |
| 
 | |
| ?>
 |