Showing posts with label Android. Show all posts
Showing posts with label Android. Show all posts

Monday, July 3, 2023

Rollback Nokia 8.1 to Android 10 from Android 11 without unlocking bootloder. Needs EDL (emergency download mode)

I updated Nokia 8.1 from Pie to Android 10 and then to Android 11. Pie was good for network because Android 10 made network connection weaker and less stable then Pie. Android 11 is the most worse Android ever released. I started hating it and was desperate to get rid of it. It was slow and didn't offered me worth more than Android 10. For security 11 is better but performance is poor. Finally after 7-10 days of effort gave me success in rolling back Nokia 8.1 to Android 10.


I never unlocked bootloader of my phone and i tried lots of methods and apps and all failed. I then started going deep into the process of how this flashing apps actually worked. I cracked it and i flashed Android 10 431A stock ROM. Before i start the whole process it is critical to understand the basics. I will describe the required details even normal PC user can understand.


Just like PC where we have hard disk which contains OS phones/tablets have solid state storage. The storage that is present in SSD, Pendrive etc.  The storage is split into multiple parts called partitions. Its like C, D, E etc drives of windows. If you are Linux user you will understand the phone storage much better than Windows users. Partitions are important because the files of each partitions doesn't interfere with other files of other partition. Example D drive has multimedia data and if full will not effect C drive which contains OS. If you fill media in C drive it will affect the OS.


Now coming to Phone storage & partitions. Nokia has eMMC storage. There is also UFS storage on many other devices. Knowing this storage type is critical before flashing ROM. Nokia 8.1 is powered by Qualcomm Snapdragon 710 chip. This is another critical information needed for flashing stock rom.


Now coming directly to the flashing process. You need below things and conditions to achieve flashing of rom.


  • Phone in EDL mode. This is another big topic which varies from device to device. I will only write about Nokia 8.1. You can try EDL cables if it works. I opened the back cover of phone and shorted the TEST POINTS to enter into EDL mode. You can search internet for same its easily available how to do it.
  • Qualcomm 9008 driver. Nokia USB driver. You can also download OST tool 6.2.8 which contains all the drivers Or download driver separately.
  • QPST/QFIL (QPST_2.7.496) tool with firehose file. Firehose file is specific to a chip. I will share relevant files which are smaller in size here. Firehose file is available insize stock roms.
  • Any C type cable with fast charging capability. This means cable must be able to handle 18W power which Nokia 8.1 adapter delivers. Also try to flip type c side of port horizontally because sometimes one side does not work.
  • USB 2.0 port
  • Windows 7/8/10. Probably 11 which i have not tested.
  • Global Stock ROM PNX-431A-0-00WW-B01. Search internet to get this rom.
  • "nb0 tools FIH Mobile v3.4.exe" tool to extract NB0 rom file.

 

Now before proceeding to flash process lets understand what these tools do.


NOTE: click on images to see them in bigger size.


Qualcomm EDL mode works with 2 communication protocols. Sahara mode and Firehose mode. Sahara mode allows user to send Firehose file to the device during EDL mode. This file understands how to communicate with device in emergency download mode. One thing to understand is during flashing process DOWNLOAD means to actually upload data to device. Device will download something not us!. This causes confusion among users who are doing it first time.

Firehose protocol works with XML format. It understands XML language and accepts file sent with xml configuration. Firehose only knows to write data to eMMC/UFS storage. Using which we write files on eMMC.


Now install the drivers, QPST, QFIL tool. Verify if drivers are installed. Turn off phone, remove battery connector from motherboard, short the test points with clip, connect phone to PC. Start device manager and check PORTS section. If you can see Qualcomm 9008 COM port everything is setup and ready to flash device. Go to QFIL tool configuration and set settings like below image.

 




The stock rom which you have download contains NB0 file. Which is extracted using nb0 tool. Run QFIL in admin mode and it should show like below.

 


 
 
 

Some critical notes -

- Enter into EDL mode just before taking upload/download actions using QFIL tool. EDL mode can stop responding if not utilized quickly.

- Load firehose file from extracted ROM folder into QFIL. If connected in EDL mode QFIL -> Tools -> Partition Manager will be available. Enter into partition manager. Here you can see partitions of eMMC.

- MAKE BACKUP of your eMMC partitions VERY CAREFULLY. If you lost mfd, fbo etc partitions forget your device will work again because you will need these partitions in any conditions to turn on phone. Below images shows all partitions.









- Left click on a partition then right click on it. DO NOT DIRECTLY right click because this will not select the partition your mouse is over. It will select whole disk or first partition. Click manage partitions and read image. This will create a file like below in %APPDATA%/qualcomm or QPST directory. Look at logs in QFIL where file has been extracted. Collect all partitions and save somewhere.

ReadData_emmc_Lun0_0x828_Len1024_DT_****.bin. DT is followed by date of dump. 0x???? part tell the start location of partition and Len tell length of the partition.


I am warning you again. The above step is more important than anything else in this guide. Don't blame me if your device stops starting again. Try to delete MFD partition and your device will not boot. Delete FDP partition and you will see "Your device is corrupt..... press power button to shutdown.... shutdown in 30 seconds". FDP partition holds data to verify device. MAKE BACKUP OF EVERY PARTITION. You can ignore system, vendor, userdata but this will erase your devices present state. MAKE BACKUP of every partition if possible because you can later write them back into emmc to get your phone back into the exact condition it is now. Read button copies the partition into you PC, load button writes partition into phone.


After making backup lets proceed to preparing ROM to flash. Before writing rom lets understand what these flashing tools actually do. Below is extra information. For quick flashing go to section FLASHING ROM below.


The flashing tools like OST tool, Nokia service tool and other tools simply use sahara, firehose protocols provided by Qualcomm. They use fh_loader.exe file to write data to emmc. The login process, account verification etc all extra stuff they have added to make money from their tool. You can do flashing process from command line itself with just QPST/QFIL.QFIL must be run from within QPST installation folder. Many times QFIL doesn't work when run from its own separate package without QPST.


The first thing these tools do is send firehose programmer file to device using Sahara mode. Its done by this command -

QSaharaServer.exe -p \\.\COM4 -s 13:C:\LogData\OST\Data\PNX-0-6210-prog_firehose_lite.elf

 

This is what OST tool does. -p tells the com port. -s tells the firehose programmer file. After this you are ready to use fh_loader.exe to write data to eMMC (OR UFS).


NOTE:

if your bootloader is unlocked then these commands and tools are not needed. fastboot mode also does the same job. fastboot handles editing of the partitions.

After sahara has sent firehose file fh_loader can write partitions. A big xml file rawprogram0.xml is sent to fh_loader. It reads it and verifies the xml and starts sending the data according to xml file. What we have to do is edit this xml file to send all the partitions at once.


OST etc tools use default raw program xml to write service abl/xbl bootloaders and then use fastboot to flash partitions. This is where flashing fails when bootloader is locked. You can various errors like Error = SE_ERR_ADB_CMD_GET_FAIL_RESULT (0xC6DA), Error 0x0c3be uploading image using sahara protocol failed. These are all due to locked bootloader or other restrictions.


FLASHING ROM:

 

Go to extracted ROM folder and create a new file "rawprogram0_RECOVER_431A.xml" and paste below into it.


<?xml version="1.0" ?>
<data>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-xbl.elf" label="xbl_a" num_partition_sectors="7168" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="3584.0" sparse="false" start_byte_hex="0x4000000" start_sector="131072"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-xbl.elf" label="xbl_b" num_partition_sectors="7168" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="3584.0" sparse="false" start_byte_hex="0x4380000" start_sector="138240"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-xbl_config.elf" label="xbl_config_a" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0xb000000" start_sector="360448"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-xbl_config.elf" label="xbl_config_b" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0xb020000" start_sector="360704"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-tz.mbn" label="tz_a" num_partition_sectors="4096" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="2048.0" sparse="false" start_byte_hex="0xc000000" start_sector="393216"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-tz.mbn" label="tz_b" num_partition_sectors="4096" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="2048.0" sparse="false" start_byte_hex="0xc200000" start_sector="397312"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-aop.mbn" label="aop_a" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0xc400000" start_sector="401408"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-aop.mbn" label="aop_b" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x10000000" start_sector="524288"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-hyp.mbn" label="hyp_a" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x14000000" start_sector="655360"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-hyp.mbn" label="hyp_b" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x14080000" start_sector="656384"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-keymaster64.mbn" label="keymaster_a" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x14300000" start_sector="661504"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-keymaster64.mbn" label="keymaster_b" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x14380000" start_sector="662528"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-cmnlib.mbn" label="cmnlib_a" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x14400000" start_sector="663552"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-cmnlib64.mbn" label="cmnlib64_a" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x14480000" start_sector="664576"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-cmnlib.mbn" label="cmnlib_b" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x14500000" start_sector="665600"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-cmnlib64.mbn" label="cmnlib64_b" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x14580000" start_sector="666624"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-NON-HLOS.bin" label="modem_a" num_partition_sectors="266240" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="133120.0" sparse="false" start_byte_hex="0x14600000" start_sector="667648"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-NON-HLOS.bin" label="modem_b" num_partition_sectors="266240" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="133120.0" sparse="false" start_byte_hex="0x1c800000" start_sector="933888"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-dspso.bin" label="dsp_a" num_partition_sectors="65536" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="32768.0" sparse="false" start_byte_hex="0x24a00000" start_sector="1200128"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-dspso.bin" label="dsp_b" num_partition_sectors="65536" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="32768.0" sparse="false" start_byte_hex="0x26a00000" start_sector="1265664"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-abl.elf" label="abl_a" num_partition_sectors="2048" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x28a00000" start_sector="1331200"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-abl.elf" label="abl_b" num_partition_sectors="2048" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x28b00000" start_sector="1333248"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-logfs_ufs_8mb.bin" label="logfs" num_partition_sectors="16384" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="8192.0" sparse="false" start_byte_hex="0x34000000" start_sector="1703936"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-BTFM.bin" label="bluetooth_a" num_partition_sectors="2048" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x38104000" start_sector="1837088"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-BTFM.bin" label="bluetooth_b" num_partition_sectors="2048" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="1024.0" sparse="false" start_byte_hex="0x38204000" start_sector="1839136"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-00WW-dtbo.img" label="dtbo_a" num_partition_sectors="16384" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="8192.0" sparse="false" start_byte_hex="0x3c022000" start_sector="1966352"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-00WW-dtbo.img" label="dtbo_b" num_partition_sectors="16384" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="8192.0" sparse="false" start_byte_hex="0x3c822000" start_sector="1982736"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-persist.img" label="persist" num_partition_sectors="65536" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="32768.0" sparse="false" start_byte_hex="0x3d426000" start_sector="2007344"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-00WW-010-keyinfo.img" label="keystore" num_partition_sectors="1024" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="512.0" sparse="false" start_byte_hex="0x3f526000" start_sector="2074928"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-devcfg.mbn" label="devcfg_a" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x3f5a6000" start_sector="2075952"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-devcfg.mbn" label="devcfg_b" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x3f5c6000" start_sector="2076208"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-qupv3fw.elf" label="qupfw_a" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="64.0" sparse="false" start_byte_hex="0x3f5e6000" start_sector="2076464"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-qupv3fw.elf" label="qupfw_b" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="64.0" sparse="false" start_byte_hex="0x3f5f6000" start_sector="2076592"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-storsec.mbn" label="storsec_a" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x43886000" start_sector="2212912"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-storsec.mbn" label="storsec_b" num_partition_sectors="256" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="128.0" sparse="false" start_byte_hex="0x438a6000" start_sector="2213168"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-00WW-vbmeta.img" label="vbmeta_a" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="64.0" sparse="false" start_byte_hex="0x4c000000" start_sector="2490368"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-00WW-vbmeta.img" label="vbmeta_b" num_partition_sectors="128" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="64.0" sparse="false" start_byte_hex="0x4c010000" start_sector="2490496"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-0010-0001-hidden.img.ext4" label="hidden_a" num_partition_sectors="81920" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="40960.0" sparse="false" start_byte_hex="0x50000000" start_sector="2621440"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-0010-0001-hidden.img.ext4" label="hidden_b" num_partition_sectors="81920" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="40960.0" sparse="false" start_byte_hex="0x52800000" start_sector="2703360"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-00WW-030-cda.img" label="cda_a" num_partition_sectors="16384" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="8192.0" sparse="false" start_byte_hex="0x55000000" start_sector="2785280"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-00WW-030-cda.img" label="cda_b" num_partition_sectors="16384" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="8192.0" sparse="false" start_byte_hex="0x55800000" start_sector="2801664"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="systeminfo.img" label="systeminfo_a" num_partition_sectors="512" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="256.0" sparse="false" start_byte_hex="0x56000000" start_sector="2818048"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="systeminfo.img" label="systeminfo_b" num_partition_sectors="512" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="256.0" sparse="false" start_byte_hex="0x56040000" start_sector="2818560"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-00WW-030-splash.img" label="splash_a" num_partition_sectors="65536" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="32768.0" sparse="false" start_byte_hex="0x56080000" start_sector="2819072"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-00WW-030-splash.img" label="splash_b" num_partition_sectors="65536" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="32768.0" sparse="false" start_byte_hex="0x58080000" start_sector="2884608"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-00WW-030-multi-splash.img" label="zplash_a" num_partition_sectors="8192" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="4096.0" sparse="false" start_byte_hex="0x5a080000" start_sector="2950144"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-00WW-030-multi-splash.img" label="zplash_b" num_partition_sectors="8192" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="4096.0" sparse="false" start_byte_hex="0x5a480000" start_sector="2958336"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-NV-default.mbn" label="nvdef_a" num_partition_sectors="8192" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="4096.0" sparse="false" start_byte_hex="0x5a880000" start_sector="2966528"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-NV-default.mbn" label="nvdef_b" num_partition_sectors="8192" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="4096.0" sparse="false" start_byte_hex="0x5ac80000" start_sector="2974720"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-00WW-001-sutinfo.img" label="sutinfo" num_partition_sectors="8" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="4.0" sparse="false" start_byte_hex="0x5b080000" start_sector="2982912"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-00WW-boot.img" label="boot_a" num_partition_sectors="131072" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="65536.0" sparse="false" start_byte_hex="0x5e081000" start_sector="3081224"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-00WW-boot.img" label="boot_b" num_partition_sectors="131072" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="65536.0" sparse="false" start_byte_hex="0x62081000" start_sector="3212296"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-00WW-system.img" label="system_a" num_partition_sectors="6291456" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="3145728.0" sparse="true" start_byte_hex="0x66081000" start_sector="3343368"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-00WW-system_other.img" label="system_b" num_partition_sectors="6291456" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="3145728.0" sparse="true" start_byte_hex="0x126081000" start_sector="9634824"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-00WW-vendor.img" label="vendor_a" num_partition_sectors="1572864" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="786432.0" sparse="true" start_byte_hex="0x1e8000000" start_sector="15990784"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-00WW-vendor.img" label="vendor_b" num_partition_sectors="1572864" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="786432.0" sparse="true" start_byte_hex="0x218000000" start_sector="17563648"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="" label="userdata" num_partition_sectors="0" partofsingleimage="false" physical_partition_number="0" readbackverify="false" size_in_KB="0" sparse="true" start_byte_hex="0x248000000" start_sector="19136512"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-gpt_main0.bin" label="PrimaryGPT" num_partition_sectors="34" partofsingleimage="true" physical_partition_number="0" readbackverify="false" size_in_KB="17.0" sparse="false" start_byte_hex="0x0" start_sector="0"/>
  <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="PNX-0-431A-gpt_backup0.bin" label="BackupGPT" num_partition_sectors="33" partofsingleimage="true" physical_partition_number="0" readbackverify="false" size_in_KB="16.5" sparse="false" start_byte_hex="(512*NUM_DISK_SECTORS)-16896." start_sector="NUM_DISK_SECTORS-33."/>
</data>

 

 

Flash process:

  • Start QFIL in admin mode. Switch to flat build.
  • Select firehose programmer path "PNX-0-431A-prog_firehose_lite.elf" present inside extracted rom dir. Load XML -> (All files *.* mode) -> load rawprogram0_RECOVER_431A.xml, then do same for patch0.xml. patch is already present in rom dir.
  • Connect phone in EDL mode. Port will be shown in QFIL. If not then select port from select port button.
  • Press download button. Flashing will start. It will takes 5-10+ minutes to write the rom.
  •  Re-enter EDL mode by unplugging usb. Start partition manager and erase userdata. Click userdata then right click userdata and erase it. Same can be done from Phone by entering recovery mode. Turn off phone, press UP button then power for few seconds. When device starts release power button but keep UP pressed. When dead android robot icon is seen press power then press UP. Wipe cache and userdata. Reboot.

 

In case you are seeing "Your device is corrupt. It cannot be trusted. Press button to continue". You should enable dm-verity enforcing. Search internet for multiple ways to do it. e.g. https://forum.xda-developers.com/t/guide-fix-dm-verity-is-not-enforcing-when-trying-to-boot-error.3898526/



If everything has been done as written you must be having a good backup of device to get back into your initial condition and a working Android 10 on your device. I did it and i am enjoying Android 10.



CRITICAL information for experimentation:

Always verify if a file which has to be written into device is sparse or not. elf, mbn etc are raw and not sparse. IMG  files can and cannot be sparse. Sparse means post processed raw image to reduce size or other purpose. Always use sparse="true" in rawprogram xml when not sure. fh_laoder will test and tell itself when download button is pressed. However best way verify xml and data is to try to create xml digest. Its present in tools section in QFIL.



Wednesday, October 5, 2022

Remove pattern lock or pin from Motorola etc Androids.

My phone was locked by a kid who forgot the password and i was not able to log into device. I was stuck at pin input screen. The recovery mode was also showing empty with a dead robot and "no command" screen.


IMPORTANT:

This is not the only way to remove pin, pattern lock. It only shows information for those who understand fastboot, adb etc stuff. Below is only required when OEM unlock is not set from developer options. This also removes all user data. However ways to keep user data exist and still remove password but that is not intention of this article.

 

Before reading further you must read following subjects/methods to understand any further. Its not useful to re-write existing things again and again.

 

- Install adb on you OS.

- How to boot into fastboot mode on your device.

- Knowing more about your device.


Th device was secured using google account and "OEM Unlock" option was also not set from developers options!. While doing ./fastboot getvar all from shell returned following info. [I_REMOVED_IT] shows text i have removed to prevent showing personal IDs.


./fastboot getvar all > info.txt
(bootloader) version: 0.5
(bootloader) version-bootloader: (removed)
(bootloader) product: sanders
(bootloader) board: sanders
(bootloader) secure: yes
(bootloader) hwrev: P4
(bootloader) radio: 2
(bootloader) storage-type: emmc
(bootloader) emmc: 64GB SAMSUNG RC14MB RV=08 PV=07 FV=0000000000000007
(bootloader) ram: 4GB SAMSUNG LP3 DIE=8Gb M5=01 M6=05 M7=00 M8=5F
(bootloader) cpu: MSM8953
(bootloader) serialno: [I_REMOVED_IT]
(bootloader) cid: 0x0032
(bootloader) channelid: 0xc0
(bootloader) uid:[I_REMOVED_IT]
(bootloader) securestate: oem_locked
(bootloader) iswarrantyvoid: no
(bootloader) max-download-size: 534773760
(bootloader) reason: Reboot mode set to fastboot
(bootloader) imei: [I_REMOVED_IT]
(bootloader) meid:
(bootloader) date: 11-16-2017
(bootloader) sku: (removed)
(bootloader) carrier_sku:
(bootloader) battid: [I_REMOVED_IT]
(bootloader) iccid:
(bootloader) cust_md5:
(bootloader) max-sparse-size: 268435456
(bootloader) current-time: "Thu Jan  1  2:36:19 UTC 1970"
(bootloader) ro.build.fingerprint[0]: motorola/sanders_n/sanders_n:8.1.0
(bootloader) ro.build.fingerprint[1]: (removed)
(bootloader) ro.build.fingerprint[2]: -keys
(bootloader) poweroffalarm: 0
(bootloader) ro.build.version.full[0]: Blur_Version.2*****.12.sanders.re
(bootloader) ro.build.version.full[1]: tail.en.US
(bootloader) ro.build.version.qcom: ******removed*******
(bootloader) version-baseband: M8953_52.61.07.98R SANDERS_INDIADSDS_CUST
(bootloader) kernel.version[0]: Linux version 3.18.71-perf (hud
(bootloader) kernel.version[1]: soncm@ilclbld57) (gcc version 4.9.x 2015
(bootloader) kernel.version[2]: 0123 (prerelease) (GCC) ) #1 SMP PREEMPT
(bootloader) kernel.version[3]:  Tue Aug 13 15:23:08 CDT 2019
(bootloader) sbl1.git: git=MBM-NG-VC2.12-0-g698fb2f
(bootloader) rpm.git: git=92e5e21-dirty
(bootloader) tz.git: git=d95e83f
(bootloader) devcfg.git: git=d95e83f
(bootloader) keymaster.git: git=d95e83f
(bootloader) cmnlib.git: git=d95e83f
(bootloader) cmnlib64.git: git=d95e83f
(bootloader) prov.git: git=d95e83f
(bootloader) aboot.git: git=MBM-NG-VC2.12-0-g07ff23c
(bootloader) frp-state: protected (144)
(bootloader) ro.carrier: retin
(bootloader) current-slot:
(bootloader) slot-suffixes: _a
(bootloader) slot-count: 1
(bootloader) slot-successful:_a: INVALID
(bootloader) slot-successful:_b: INVALID
(bootloader) slot-bootable:_a: INVALID
(bootloader) slot-bootable:_b: INVALID
(bootloader) slot-retry-count:_a: unknown
(bootloader) slot-retry-count:_b: unknown


In this result securestate: oem_locked shows oem is locked. Bootloader was locked and to unlock it i created motorola id and requested UNLOCK KEY. However the unlock key was also not enough. After getting unlock key i tried to unlock -


fastboot oem unlock [MY_UNLOCK_KEY]
(bootloader) WARNING: This command erases all user data.
(bootloader) Please re-run this command to continue.
OKAY [  0.000s]
Finished. Total time: 0.000s

fastboot oem unlock [MY_UNLOCK_KEY]
(bootloader) Check 'Allow OEM Unlock' in Android Settings > Developer
(bootloader) Options
OKAY [  0.016s]
Finished. Total time: 0.016s


"(bootloader) Check 'Allow OEM Unlock' in Android Settings". One simple solution to this is erase user data. WARNING: It will wipe out all data. 


Run following commands to erase user data when recovery mode doesn't  show any options.


fastboot oem fb_mode_set

fastboot erase cache

fastboot erase userdata        [THIS PART DELETES USER DATA]

fastboot oem fb_mode_clear


reboot. More data can be erased above or simply find the relevant file to erase the PIN or PATTERN lock related information.

 

The device will be reset and if it was protected using Google account then SAME account will be required to login again otherwise device won't start for new users. Internet is NEEDED after reboot.

Wednesday, June 15, 2022

Quitting Android development and almost stopping publishing to PlayStore.

From 2012 i started Android development and no single year has passed i felt comfortable with APIs or its user interface. I was making  innovative or rare hard to find apps like below.

- NGGallery (quit): which allowed slideshow of gallery images which speak their own information previously recorded by whoever clicked the pic.

- Binaural Sound Recorder (quit): Records stereo or binaural using 2 devices.

- BVH viewer (quit): bvh animated model viewer + BVH modifier (was WIP).

- Freeform Optics (quit): Makes complex lens and test how rays travel.

- Sacred Sound Visualizer (quit): Make cool flower like art from voice. Can also be used for various purposes.

- Image Size Reducer (nearly quit, just keeping updated to new Androids):  Select a region of image and just tell the KB size for it and app will take it out for you in fraction of time. Or reduce the size of whole image to desired size without loosing noticeable image quality. Does not work for already low quality images.

- Various apps like Sound Effect makers using wave painting, Voice to instrument sound generation etc. I have built both these apps and are sleeping in my disk not uploaded anywhere. I am now keeping only very simple apps and the ones which are very useful. I don't even care for updating them or investing more time to them. Some of them are SoundFont-MIDI-Player which offers low latency playback and piano for SF2 samples, Image Size Reducer & image converter.



Back to the topic. Android has massive issues for developers and i have removed all tech details posted here previously. I am sharing only the most critical ones which non tech end users can understand.


Reason #1:

PlayStore itself has become the reason to not publish on playstore. If you publish an app and your cannot find that app by searching the exact name of it what do your think it means?

PlayStore just sells the top 3 ranks! Imagine a sports competition where top 3 are paid winners. Below is an example where 50% of screen from top is just ads.




I searched games and the result shows top 3 with Ad text. Most users don't know they are ads. They think they are top ranking apps. Why so shy clearly highlighting the apps as ads? Using a little "Ad" which most cannot see or notice.


Every fall in rank almost reduces the download by ~30-50%. Some of my apps come to top 3 ranks since 2016. Daily downloads were minimum 1500+. Now after 3 ads the actual rank become 5+ and download fell to 300-450. Similar times loss in earnings. Post covid life of many people has changed. Now it has become impossible to have any interest in working anymore. Google will kill many developers and ultimately itself.


Google is obviously feeling the heat of falling economy and earnings but that means you just keep increasing ads? There might be other ways to experiment.


These things will only become worse by time. Whether its YouTube or something else. Everyone will witness the fall of internet world. Crazy, nonsensical things rising and huge compromise in ethics. The compitition where money wins doesn't promote hard work but economic unethical practitioners. But ultimately Its the people themselves who are responsible for this.


Reason #2:

Google terminated my YouTube account for something i was not responsible. Google updated their policy and said an app on playstore which shows a demo video which comes from youtube account MUST not have ads enabled in that video. What i did was i unpublished 10+ of my apps due to lack of maintenance and time etc issues. Google bots are oversmart. They scan even the unpublished apps and found a YouTube video link with monetization enabled. They terminated the YouTube account. I just used that account to make few videos about app demos and it had nothing which violates youtube policies. YouTube deleted the account in spamming violation.


Google Play Store applied policy violation on dead/unpublished apps. This is beyond understandable...


This motivated me so much i deleted 2nd account of YouTube myself. Now i use YouTube without account and its more fun than before.


Technical reasons:

Android development is hell in itself. I will describe it using analogy. Suppose you are learning painting on a painting app. Everytime you learn a feature and UI layout it's removed next year. Most new things become obsolete and suddenly some features return after some time. Your spend 10yrs learning the app and its UI but learned nothing about painting itself.


The file management SAF (document API) in Android is most crappiest thing i have seen in years of development. Just trying to check if some files exists can takes seconds which even 90s era computer will not. In name of security and generics the core has been compromised. If you don't want to allow an app to read other app's data then just use an encryption filter. Every app has its own encryption. Use intents to allow decrypted reading. I am thinking what makes Android more secure than Linux? Even after so much security user data is still being theft. Because the data itself has got no security. Only Android infrastructure has become secure the user data remains in same fate.


Android has definitely become much better and the changes were critical in need and also had great intention. But if it makes experience of both end user and developers bad the result is bad. 


I loved Android where i could listen to chiptunes, make awesome experimental apps, do innovation, playing with sensors etc.


Android has become IPhone. A well maintained jail with cool hardware that cannot be used for emulation, experimental apps etc like it was before. I cannot even enjoy using terminal shell.

 

Time has come for the innovative developers to say Android is dead or its not something to work for. Pure Linux must come to phone and it should not do what Android has done.


Monday, June 13, 2022

How to fill Data Safety form in App Content section in Play Console when using AdMob only?

PlayStore requires Data safety form submission for all apps and violation of it can cause problem. Below is example of what to fill in the form when you use only Admob. This setting is because i use it in my apps and i only use AdMob SDK for ads.


Open Play console & login.

 

All Apps -> Select an app -> Policy  -> App Content -> Data Safety


Does your app collect or share any of the required user data types?
Yes

Is all of the user data collected by your app encrypted in transit?
Yes 

Do you provide a way for users to request that their data is deleted?
Yes


More information can be found at this link https://developers.google.com/admob/android/play-data-disclosure


Data Collected settings

- No, this collected data is not processed ephemerally
- Data collection is required (users can't turn off this data collection)
- Collected for Advertising or marketing


Data Sharing settings

Location -> Approximate location
Collected & Shared -> Advertising or marketing

 

App info and performance -> Crash logs, Diagnostics
Collected & Shared -> Advertising or marketing


App info and performance -> Diagnostics
Collected & Shared -> Advertising or marketing

 

App activity -> App interactions
Collected & Shared -> Advertising or marketing

 

Device or other IDs -> Device or other IDs
Shared -> Advertising or marketing



The user data can be deleted or prevented from targeted sharing from Android device system settings.


Got to system settings -> Google (Services & preferences) -> Ads -> Reset ad ID & opt out of Ads personalization.





Saturday, December 11, 2021

IdeaPost: convert usb keyboard mouse to bluetooth

Note:
This is an IDEA post not a standalone working solution.


I was planning to create an Android app which converts usb keyboard and mouse to bluetooth. This is an idea that can easily be created but there are various problems which make it inconsistent also. The idea is to plug usb keyboard and mouse into Android device using otg and then using a software to establish bluetooth connection with pc or other device. The software are already available on Playstore which can do something like this e.g. https://play.google.com/store/apps/details?id=io.appground.blek

There are many other apps also. However these apps do not route keyboard and mouse events from usb. They make screen itself as a mouse and utilize input text field for keyboard events.

The solution is to make app which listens to hardware events and transfers them to PC etc. Android can use various services to intercept keyboard and mouse events. If anyone is interested i can make it but i don't think it (again) will help me financially like previous apps gone through. If you are a developer then do share me your app if you make one.

If you are a normal user who has found a working solution do share it in comments section i will update the blogpost. The solution of complex methods already exists!. Like using rooting of device, accessibility service for inputs etc. These apps are surely going to stop working in coming android updates :0.

Privacy/Security threat:
Any app which can listen to keyboard can also log all events and cause a privacy security threat. For  example if you are visiting a bank website and its obviously sure whatever your type after opening this website is your password, username etc. This is what loggers do. They save whatever you type. Due to this listening to input events is not allowed by any operating system. I hope this article gives some ideas and some possible problems while implementating the ideas.

Sunday, February 14, 2021

Connect gen game s3, x3, GSH, shanwan wireless gamepad to various devices

The controller is available in various different brand names but its same. Companies do rebranding and sell.

 

Flipkart page for sample -

https://www.flipkart.com/dwh-x3-mobile-wireless-bluetooth-game-controller-bracket-gamepad-support-ios-android-smart-t-v-pc-black-joystick-black-pc/p/itm5fa472358e25b


 

I have tested it on Android phones, tablet and Ubuntu laptop. It works with both Bluetooth and usb mode. Wifi/wireless mode also supposed to work using a BM-703 dongle which i couldn't test due to lack of dongle.


This seems to be BEST BUDGET gamepad!. Very surprising when compared with others at Rs1000.


Update:

I tested GSH model and it looks like multiple types of other clone models also exist. But the basic idea and techniques to connect are same as described below. Your device may show different name and may have different combinations of keys!. Don't give up by thinking your device is not working it just has different keys and ways to connect. Don't throw your gamepad manual because its hard to find on internet and unique to your device.



As Bluetooth gamepad in Keyboard mode:


Turn on Bluetooth of Android. If gamepad is on then turn it off by long pressing home button until lights are off. Press X or Y then home for ~3-5 seconds. Home led with blink and Bluetooth search will show a wireless keyboard device named "gamepad". Will easily pair and DON'T forget to enable option "show virtual keyboard when hardware keyboard is connected" option in Android otherwise soft keyboard will remain disabled!. In this mode home button can be pressed to switch to Mode 2 and L3,R3 will act as mouse. This seems to be most compatible mode.



Bluetooth HID gamepad mode

Press A or B then home and Bluetooth gamepad will show and gamepadplus name will show. In this mode it doesn't act like keyboard and not every app can detect correct key names. Some apps may show KEY_UNKNOWN while mapping. This mode supports L3,R3 which is needed for PS1, PSP etc games. Retroarch worked very well with both above modes.


Try experimenting with home + all the buttons you have. Even if your model is different, old version or latest some keys can surely work.


Some combinations mentioned in manual below:


Home+X = Android

Home+Y = Ios

Home+A = Switch

Home+B = PS3

Home+L1,L2 for PC Bluetooth or cable.


Manual provides other details for Ios.


USB otg mode:

Press R1 + Home. 1 and 4 leds will blink. If XBox gamepad drivers are present in ANY OS the gamepad will detect after plugging by usb cable. 

NOTE: provided usb cable in box is not data cable but charging cable. Use data cable and gamepad works as Microsoft xbox 360 controller.


Lots of users are unable to find these details and think the gamepad is bad. Gamepad is really great and also has less latency. Almost like wired.



Official manual:


Manual also shows other devices and ways to connect.



Secret/Hidden:


There is a hole at the back side of gamepad to reset the current pairing master device just like dualshock 3 gamepad. Use something like needle and insert in the hole to press a switch. Hole at right side of usb port at back side. After reset the gamepad will not automatically connect to last Bluetooth device.



Common issues:


- Pairing fails on some devices like TV etc. Try different modes to get the connection established. The gamepad didn't connected to my TCL Android TV. May work by forcing to trust the device and pair or use other modes of gamepad.


- Stock androids lack commercial drivers and many other such drivers. This cause no detection of various gadgets not just this gamepad. E.g. F310 Logitech gamepad didn't connected to Nokia 8.1 but worked on other devices. Xinput mode requires drivers.


The gamepad is available with names MJ600, shanwan x3, gsh wireless, Gen Game S3 etc. All are same.


- When connection is getting problematic reset the gamepad by the secret hole at back side.

Sunday, October 13, 2019

How to install apk in Android 10?

Just updated to Android 10 and found apk cannot be installed from just any file manager or other apps. The solution is simple and given below.


Go to setting of Android -> Storage -> Select storage -> Browse and install apks.

Or

Google's own app called "Files" can install apk files. Download files apk from playstore and install backup apks. This feature is extremely important because many apks are no longer available on playstore due to various reasons. For example my  i own games i unpublished from store. There may be other apps which can install apks.



Adjust audio left right balance in Android 10 (tested on Nokia 8.1)

Audio balance option is many times required for gadgets where LR is wrong or some people cannot hear equally from both ears due to various reasons. This feature of Android 10 will help.



As the screenshot shows this option is present in Accessibility settings at bottom. But before confirming LR has imbalance use "Mono" setting and check if both lr are equal in volume. If there is difference then spin disable mono setting and use spin control to slide LR until both ears hear equal.

Saturday, July 27, 2019

Remove/Hide notch on Nokia 8.1 or other devices on Android pie.

I got my Nokia 8.1 but had to go through lots of unwanted stuff like "setup notification" requiring downloads, notch screen which i hate. Below method removes notch and makes notch fully black thus creating a virtual hiding.


If available:

Settings -> Display -> Full bezel (Enable it).


If above not avialavai follow below method. I must work on most devices to remove notch, dew drop etc.


First go to

Settings -> System -> About Phone

Tap "Build number" multiple times. You will see developer mode on message/toast. Once developer mode is on exit settings and come back to setting and go to developer options which will start showing as new entry not available before.


Settings -> System -> Developer Options

Inside dev mode go to option "Full Bezel" and turn it ON. Now notch is gone and your screen will look rectangular. 

Monday, July 22, 2019

Best Android Audio Player for chiptune, old console musics and 100s of formats!

Some years ago Android had lots of chiptune players but after Android 5 many disappeared. My favorite was DroidSound. It also disappeared from PlayStore. I am a developer and myself had created SoundFont midi player and was willing to revive DroidSound player and publish on PlayStore. However there are so many plugins and licenses that it will take lots of time managing them. But there is great news! DroidSound player it still getting updated to work on latest Android devices. Below are more information and links -

Update:
DroidSound is available here https://droidsounde.herokuapp.com/
And here https://droidsounde.herokuapp.com/

Below version are old but i recommend them as they don't ask for record audio permission forcefully.


Download DroidSound APK from here are enjoy Chiptune :).

NOTE: PlayStore apk is outdated 2015 version. Its here:
https://play.google.com/store/apps/details?id=com.droidmjt.droidsounde



Current version:
https://www.dropbox.com/s/71xq7cvinon919r/droidsounde167_177.apk?dl=1


Latest version: (look at bottom of page for link)
https://github.com/droidmjt/Droidsound



Website:
https://droidmjt.github.io/Droidsound/



DroidSound player is good for console musics and chiptunes. It can also play ogg, mp3 etc but for that its not much useful like other player. It also lacks seeking for many formats. It can also export chiptune to ringtones or stream formats. Below are plugins and supported formats. Refer to individual plugins from exhaustive list of formats supported.



OpenMPT plugin can play tracker files. Excerpt from OpenMPT page: https://wiki.openmpt.org/Manual:_Module_formats


The following formats can be imported into OpenMPT. Internally, they are converted to one of the file formats described above. Depending on the source format, conversion might not always be accurate.
  • Composer 669 / UNIS 669 (.669)
  • ASYLUM Music Format / Advanced Music Format (.amf)
  • Extreme’s Tracker / Velvet Studio (.ams)
  • Composer 670 / CDFM (.c67)
  • Digi Booster Pro (.dbm)
  • Digi Booster (.digi)
  • X-Tracker (.dmf)
  • DSIK (.dsm)
  • Digital Tracker / Digital Home Studio (.dtm)
  • Farandole Composer (.far)
  • General Digital Music (.gdm)
  • Ice Tracker / SoundTracker 2.6 (.ice / .st26)
  • Imago Orpheus (.imf)
  • Impulse Tracker Project (.itp) – legacy OpenMPT format with instruments stored in external files rather than directly in the module
  • Jazz Jackrabbit 2 Music (.j2b)
  • SoundTracker and compatible (.m15 / .stk)
  • DigiTrakker (.mdl)
  • OctaMED (.med)
  • MadTracker 2 (.mt2)
  • MultiTracker (.mtm)
  • Oktalyzer (.okt)
  • Epic Megagames MASI (.psm)
  • Disorder Tracker 2 (.plm)
  • ProTracker 3.6 IFF (.pt36)
  • PolyTracker (.ptm)
  • SoundFX / MultiMedia Sound (.sfx / .sfx2 / .mms)
  • Scream Tracker 2 (.stm)
  • Soundtracker Pro II (.stp)
  • UltraTracker (.ult)
  • Unreal Music (.umx) only from Unreal (Tournament 1), Deus Ex and Jazz Jackrabbit 3D
  • Grave Composer (.wow)


Stream formats like ogg, mp3, m4a etc are supported.



GME plugin can play below files. Table taken from -
http://www.slack.net/~ant/libs/audio.html

FormatSystem
AYZX Spectrum, Amstrad CPC
GBSNintendo Game Boy
GYMSega Genesis, Mega Drive
HESNEC TurboGrafx-16, PC Engine
KSSMSX Home Computer, other Z80 systems (doesn't support FM sound)
NSF, NSFENintendo NES, Famicom (with VRC 6, Namco 106, and FME-7 sound)
SAPAtari systems using POKEY sound chip
SPCSuper Nintendo, Super Famicom
VGM, VGZSega Master System, Mark III, Sega Genesis, Mega Drive, BBC Micro




GSF plugin can play GSF Gameboy Advance audio files.



HE i.e Highly Experimental plugin can play PlayStation 1 PSF and PlayStation 2 PSF2 files.


Hively plugin can play hively tracker files AHX, HVL. http://www.hivelytracker.co.uk/about.php


HQ plugin can play some psf+psflib files. Kabuki encrypted.


HT plugin can do Saturn and Dreamcast sound emulation. psflib like format.


NDS plugin can play Nintendo DS music 2sf files.


SC68 plugin can play Atari & Amiga files. http://sc68.atari.org/


SID plugin can play SID C64 audio files.


UADE plugin for Amiga files.


LazyUSF plugin can play Nintendo 64 USF audio files.


VGM plugin can play VGM (Video Game Music) of Sega
Master System, Sega Game Gear and possibly other machines like Sega
Genesis. https://vgmrips.net/forum/viewtopic.php?t=112


VGMstream plugin can play console stream files like xa, strm files for Nintendo DS, PSX etc. https://github.com/losnoco/vgmstream.


Adlib plugin inside VGM plugin can play Adlib, OPL files. Below section taken from https://adplug.github.io/

AdPlug implements unique file replayers for each supported audio format in order to achieve the best possible replay quality. Players marked as "preliminary" aren't considered final by the author and may contain many replay issues, but are included for testing purposes anyway. As of now, the following formats are supported:
  • A2M: AdLib Tracker 2 by subz3ro
  • ADL: Westwood ADL File Format
  • AGD: Herbulot AdLib Gold System (HERAD) by Remi Herbulot (preliminary)
  • AMD: AMUSIC Adlib Tracker by Elyssis
  • BAM: Bob's Adlib Music Format
  • BMF: Easy AdLib 1.0 by The Brain
  • CFF: BoomTracker 4.0 by CUD
  • CMF: Creative Music File Format by Creative Technology
  • CMF: SoundFX Macs Opera tracker by Linel
  • D00: EdLib by Vibrants
  • DFM: Digital-FM by R.Verhaag
  • DMO: Twin TrackPlayer by TwinTeam
  • DRO: DOSBox Raw OPL Format
  • DTM: DeFy Adlib Tracker by DeFy
  • GOT: God Of Thunder Music by Roy Davis of Adept Software
  • HA2: Herbulot AdLib System v2 (HERAD) by Remi Herbulot (preliminary)
  • HSC: HSC Adlib Composer by Hannes Seifert, HSC-Tracker by Electronic Rats
  • HSP: HSC Packed by Number Six / Aegis Corp.
  • HSQ: Herbulot AdLib System (HERAD) by Remi Herbulot (preliminary)
  • IMF: Apogee IMF File Format
  • IMS: IMPlay Song Format
  • JBM: JBM Adlib Music Format
  • KSM: Ken Silverman's Music Format
  • LAA: LucasArts AdLib Audio File Format by LucasArts
  • LDS: LOUDNESS Sound System
  • M: Origin AdLib Music Format
  • MAD: Mlat Adlib Tracker
  • MDI: AdLib MIDIPlay File Format by Ad Lib Inc.
  • MID: MIDI Audio File Format
  • MKJ: MKJamz by M \ K Productions (preliminary)
  • MSC: AdLib MSCplay
  • MTK: MPU-401 Trakker by SuBZeR0
  • MUS: AdLib MIDI Music Format by Ad Lib Inc.
  • RAD: Reality ADlib Tracker by Reality
  • RAW: RdosPlay RAW file format by RDOS
  • RIX: Softstar RIX OPL Music Format
  • ROL: AdLib Visual Composer by AdLib Inc.
  • S3M: Screamtracker 3 by Future Crew
  • SA2: Surprise! Adlib Tracker 2 by Surprise! Productions
  • SAT: Surprise! Adlib Tracker by Surprise! Productions
  • SCI: Sierra's AdLib Audio File Format
  • SDB: Herbulot AdLib System (HERAD) by Remi Herbulot (preliminary)
  • SNG: SNGPlay by BUGSY of OBSESSION
  • SNG: Faust Music Creator by FAUST
  • SNG: Adlib Tracker 1.0 by TJ
  • SOP: Note Sequencer by Lee Ho Bum (sopepos)
  • SQX: Herbulot AdLib System (HERAD) by Remi Herbulot (preliminary)
  • VGM: Video Game Music 1.51 by Valley Bell (preliminary)
  • XAD: eXotic ADlib Format by Riven the Mage
  • XMS: XMS-Tracker by MaDoKaN/E.S.G
  • XSM: eXtra Simple Music by Davey W Taylor


Friday, January 4, 2019

Way for Android emulators or similar apps to write to storage with NO WRITE permission.

I was playing NES games with Android NES.emu emulator but its internal filemanager was not able to pick internal storage for saving states.

There was setting to save states to same location of ROM. This failed due to no permission. The solution is to create a "<PackageName>/files" directory inside the top of that storage.

Example:

Any Android app has default write access to Android/data/<packagename>

In my case it was /storage/emulated/0/Android/data/com.vapps.NesEmu2/files.

So i created same layout of folders in my external SDCARD where roms were. Like this :


/storage/0000-0000/Android/data/com.vapps.NesEmu2

This location had write permission and the app was able to save states there. Using the same method we can allow Android apps to save files to removable storage WITHOUT write permission. This is a good workaround when internal memory is low or filemanager simply cannot go to internal storage.

Before doing anything we must first find the package name and create thatnamed folder inside "Android/data" of any storage. Package finder apps can be found on playstore.

Saturday, December 22, 2018

Recover non booting, blank Nubia Z9 Mini or probably other Nubia models

I created this post when my Nubia Z9 Mini was stuck at Nubia logo. How my phone got bricked?

NOTEs: At end of page i have pasted links which may get outdated. Use Google in that case. Also write IMEI of device somewhere because it has to be put back to device. This page doesn't handle IMEI process. Kindly take help on XDA platform for same in detail. This page is for quicker help.


I tried installing superuser.zip from Nubia's internal stock recovery options and after that whenever Nubia booted it showed "Android is updating 3 of 3". This always occurred may be because package was for TWPR and i used Nubia stock recovery. But after that i used "Nubia Z9 Mini Recovery Tool V4.0" and installed TWRP custom recovery. Phone ran fine for many days and suddenly it stopped at "Android is updating 3 of 3". After this phone stopping booting after Nubia logo.

Before i proceed with recovery process here is quick information of system. Android devices have internal memory with multiple partitions. These partitions are for various purposes. If you have studied Linux you will know what they are for. For these partitions there are files. Below are most important files -

boot.img, recovery.img.

As the name says boot.img is boot image and recovery.img is for recovery. Any non booting phone must FIRST be fixed to contain VALID boot.img and recovery.img files. This can be done by flash tools made for the devices. Lets fix them for Nubia Z9 mini.


Download below files using Google search as i cannot post links as they keep changing.

  • Download & Install "Nubia Tool Studio V4.7.04" ~30-35MB.
  • "Nubia_Restore_Tool_V1.0.5" its around 185MB. Its 185 MB because it contains many stock rom images of multiple devices. 1 device ROM files may be around 50MB or less.
  • Download Official ROM from Nubia website. For Z9 Mini Indian version its NX511J_INCommon_V4.0.4. Zip file NX511J-update.zip is 898MB.


Time for real work. Connect Phone to PC because even if battery is down it will keep charging. Press POWER + VOLUME DOWN + VOLUME UP. This will restart phone in FLASH mode to edit its partitions. Run Nubia Tool Studio and Select phone model. In my case it was NX511J_V3.


  • Double click "Firehose Download". It will start showing Port, USB number etc information.
  • Go to location where Nubia Restore Tool was installed. Its generally installed in "C:\Program Files (x86)\nubia\BackupRecoveryTool".
  • Locate Recovery folder and inside it you will find phone models and inside the desired model recovery.img and boot.img files. Create a folder and copy these files there.
  • TRICK:  Here is the real trick which works. Unzip the Nubia Official Stock ROM and copy boot.img and recovery.img files and paste inside the Recovery folder of device in BackupRecoveryTool above. This will replace the old img files with new img files.
  • Its time to start updating partitions. In Tool Studio click browse button in Firehose Download tab. Select the folder where we just paste img files from Stock ROM. Press START.

Tool Studio will show messages like this :


[00001]18:58:25:808 [COM3] Starting...
[00002]18:58:28:121 [COM3] Start to download...
[00003]18:58:28:293 [COM3] Downloading prog_emmc_firehose_8936.mbn...
[00004]18:58:28:590 [COM3] Waiting for firehose mode...
[00005]18:58:31:981 [COM3] Start to download...
[00006]18:58:32:059 [COM3] Downloading boot.img...
[00007]18:58:35:106 [COM3] Downloading recovery.img...
[00008]18:58:38:466 [COM3] Downloading recovery.img...
[00009]18:58:41:826 [COM3] Downloading gpt_main0.bin...
[00010]18:58:41:889 [COM3] Calculating gpt_main0.bin MD5...
[00011]18:58:41:935 [COM3] Reading gpt_main0.bin back...
[00012]18:58:42:951 [COM3] Calculating 52425252_gpt_main0.bin MD5...
[00013]18:58:42:998 [COM3] Verify gpt_main0.bin succeed
[00014]18:58:42:998 [COM3] Downloading gpt_backup0.bin...
[00015]18:58:43:076 [COM3] Calculating gpt_backup0.bin MD5...
[00016]18:58:43:107 [COM3] Reading gpt_backup0.bin back...
[00017]18:58:44:123 [COM3] Calculating 52425252_gpt_backup0.bin MD5...
[00018]18:58:44:170 [COM3] Verify gpt_backup0.bin succeed
[00019]18:58:44:545 [COM3] Resetting...
[00020]18:58:44:623 COM3[USB6] disconnected
[00021]18:58:54:689 [COM3] Reset failed


In my case "Reset Failed" but even after that phone was fixed. The phone is NOT fixed yet.

Now keep pressed these buttons POWER+VOLUME DOWN. This will boot into recently flash recovery.img. Copy our downloaded NX511J-update.zip into SDCARD. Now put SDCARD into phone. Goto option update from EXTERNAL SDCARD. Select NX511J-update.zip and start. It will take time. Again restart phone. If phone boots well then fine otherwise keep POWER+VOLUME DOWN pressed and WIPE Cache, data etc i.e. factory reset. Now restart phone and it must boot. If it takes many minutes at "Be yourself" or other boot animation let it stay there. After these phone will boot.


In this post you must have known that boot.img and recovery.img must be FIXED first. If you are done phone can then be fixed. I hope this will help not just for Nubia but others also. Kindly use Google to download all relevant files. However below are some links.

Tool Studio etc: Use the versions i have used.



Wednesday, April 5, 2017

Disable/Change default Nubia UI 4.0 Launcher

If you have updated your Nubia device to to Nubia UI 4.0 and cannot remove its default Nubia launcher then this post will help you.

I just updated my Nubia Z9 Mini to Nubia UI 4.0 and will say this update is awesome!. But i always hate the launchers which contain all icons on desktop in unsorted order. I am very irritated by this because i know if i have to launch Twitter or WhatsApp the letter comes at end and icon will be at end of launcher. To get rid of this i installed Nova launcher (holo launcher is my favorite). Follow the below steps to set default launcher or other default apps in Nubia UI 4.0.

- Install your favorite luncher.
- Go to settings -> Apps -> at top right there is  drop down list. Press it. -> Select your launcher.

You are done setting default launcher in Nubia 4.0.

Tuesday, March 14, 2017

Non GPL libsndfile alternative to read wav files. tinysndfile with Apache License, Version 2.0

A lot of people avoid using GPL in non-free software due to its imposed restrictions. I decided to use libsndfile which is GPL. But many people claim different restrictions as per GPL and i decided to avoid using this library because there were so many conflicting statements that i ended up with no conclusion. I still fear if someone claims for my GPL based projects on PlayStore to provide full source code!. I am not even maintaining many of them. If i am using GPL to process a wav file and i provide enough methods to enhance that GPL part of code why i am forced to provide rest of code?. This way one can even claim whole operating system to become GPL!!!. That's why Android Project decided to go with Apache License.


With above case in mind many developers built software with simpler licenses not imposing loads of terms and conditions. tinysndfile is such alternative to libsndfile. This library is available here https://android.googlesource.com/platform/system/media/+/master/audio_utils. tinysndfile is Android only and requires some editing to make it work on *NIX. I have done that work and stripped audio_utils to extract out tinysndfile. Using this library wav file can be read to get PCM data. It supports common wav files. Whether its a commercial project or a free software use it without fear of any legal issues.



Why tinysndfile?


Look at libsndfile page http://www.mega-nerd.com/libsndfile/ . Below text is read from the same -


"Licensing

libsndfile is released under the terms of the GNU Lesser General Public License, of which there are two versions; version 2.1 and version 3. To maximise the compatibility of libsndfile, the user may choose to use libsndfile under either of the above two licenses. You can also read a simple explanation of the ideas behind the GPL and the LGPL here.

You can use libsndfile with Free Software, Open Source, proprietary, shareware or other closed source applications as long as libsndfile is used as a dynamically loaded library and you abide by a small number of other conditions (read the LGPL for more info). With applications released under the GNU GPL you can also use libsndfile statically linked to your application.

I would like to see libsndfile used as widely as possible but I would prefer it if you released software that uses libsndfile as Free Software or Open Source. However, if you put in a great deal of effort building a significant application which simply uses libsndfile for file I/O, then I have no problem with you releasing that as closed source and charging as much money as you want for it as long as you abide by the license."



Small number of other terms are so much that i avoided using it. Such a great software i decide not to use :(. Example of such other terms are -


https://www.gnu.org/licenses/why-not-lgpl.en.html


https://source.android.com/source/licenses.html#why-apache-software-license



Don't forget to read the GPL section -

http://www.cgal.org/license.html




Download links:

You can download my non-Android version of tinysndfile from here https://github.com/bindeshkumarsingh/android-native-libs/blob/master/tinysndfile-src-nix.7z

Compiling libjpeg-turbo 1.5.1 on Android

I tried to build Turbo JPEG libary using cmake and then encountered "Platform not supported by this build system.  Use autotools instead.". This is because the author has hard-coded cmake script for windows platform only. I tried to modify cmake and build turbo-jpeg but before that i built it using configure script.


I created below script to build turbo-jpeg. The configure script automatically enabled NEON support after checking ARM environment. Anyone can use this script by changing variables like NDK, ARCH, PLATFORM etc.

This script will not work without some editing. There may be other ways to compile successfully but i was getting SIZE_MAX undefined error so i simply added #include in jmemmgr.c and completed building the binaries. File BUILDING.md has instructions to build Android version.


AndroidBuild.sh :
#!/bin/sh
# http://www.ourinnovativemind.in
# http://www.gamesgreh.in

export CONFIGURATION_OPTIONS="--disable-shared --enable-static"


# use custom build environment

# installation directory
export PREFIX=`pwd`/prefix

# Path of NDK. For simplicity make symlinks in home directories
export NDK=/home/bindesh/bin/ndk/

# processor specific libraries and includes.
# Suffix for arch-???. arch-arm  arch-arm64  arch-mips  arch-mips64  arch-x86  arch-x86_64
export ARCH=arm

# compiler for processor
export CROSS_COMPILE=arm-linux-androideabi

# Android platform version
export PLATFORM=android-9

# GCC compiler version
export GCC_VERSION=4.9


# Getting toolchain directory inside NDK from variables set above
# Hardcoded for linux running on x86 cpu 64-Bit
export ANDROID_PREFIX=${NDK}/toolchains/$CROSS_COMPILE-$GCC_VERSION/prebuilt/linux-x86_64

# SYSROOT. usr dir i.e. usr/include, usr/lib
export SYSROOT=${NDK}/platforms/$PLATFORM/arch-$ARCH
export CROSS_PATH=${ANDROID_PREFIX}/bin/${CROSS_COMPILE}

# Some compiler and binutils. More might be needed depending on source. 
export CPP=${CROSS_PATH}-cpp
export AR=${CROSS_PATH}-ar
export AS=${CROSS_PATH}-as
export NM=${CROSS_PATH}-nm
export CC=${CROSS_PATH}-gcc
export CXX=${CROSS_PATH}-g++
export LD=${CROSS_PATH}-ld
export RANLIB=${CROSS_PATH}-ranlib


# package configuration file save location
export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig

# Flags for compiler
export CFLAGS="${CFLAGS} --sysroot=${SYSROOT} -I${SYSROOT}/usr/include -I${ANDROID_PREFIX}/include"
export CPPFLAGS="${CFLAGS}"
export LDFLAGS="${LDFLAGS} -L${SYSROOT}/usr/lib -L${ANDROID_PREFIX}/lib"

./configure --host=${CROSS_COMPILE} --with-sysroot=${SYSROOT} --prefix=${PREFIX} "$@" $CONFIGURATION_OPTIONS
make
make install



Below is the log file dumped after running this script. The resulting binaries can be downloaded from https://github.com/bindeshkumarsingh/android-native-libs/blob/master/libjpeg-turbo-1.5.1_Android.7z.

I haven't used this build for making a libjpeg client app. I expect it will work.


log :
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-linux-androideabi-strip... no
checking for strip... strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking for style of include used by make... GNU
checking for arm-linux-androideabi-gcc... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... yes
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc accepts -g... yes
checking for /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc option to accept ISO C89... none needed
checking whether /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc understands -c and -o together... yes
checking dependency style of /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc... gcc3
checking how to run the C preprocessor... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-cpp
checking for arm-linux-androideabi-gcc... (cached) /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc accepts -g... (cached) yes
checking for /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc option to accept ISO C89... (cached) none needed
checking whether /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc understands -c and -o together... (cached) yes
checking dependency style of /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc... (cached) gcc3
checking for arm-linux-androideabi-ar... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
checking the archiver (/home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar) interface... ar
checking dependency style of /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc... gcc3
checking build system type... x86_64-unknown-linux-gnu
checking host system type... arm-unknown-linux-androideabi
checking how to print strings... printf
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for fgrep... /bin/grep -F
checking for ld used by /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld
checking if the linker (/home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm
checking the name lister (/home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-unknown-linux-gnu file names to arm-unknown-linux-androideabi format... func_convert_file_noop
checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld option to reload object files... -r
checking for arm-linux-androideabi-objdump... no
checking for objdump... objdump
configure: WARNING: using cross tools not prefixed with host triplet
checking how to recognize dependent libraries... pass_all
checking for arm-linux-androideabi-dlltool... no
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for arm-linux-androideabi-ar... (cached) /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
checking for archiver @FILE support... @
checking for arm-linux-androideabi-strip... strip
checking for arm-linux-androideabi-ranlib... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ranlib
checking command to parse /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm output from /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc object... ok
checking for sysroot... /home/bindesh/bin/ndk//platforms/android-9/arch-arm
checking for a working dd... /bin/dd
checking how to truncate binary pipes... /bin/dd bs=4096 count=1
checking for arm-linux-androideabi-mt... no
checking for mt... mt
checking if mt is a manifest tool... no
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc supports -fno-rtti -fno-exceptions... no
checking for /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc option to produce PIC... -fPIC -DPIC
checking if /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc PIC flag -fPIC -DPIC works... yes
checking if /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc static flag -static works... yes
checking if /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc supports -c -o file.o... yes
checking if /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc supports -c -o file.o... (cached) yes
checking whether the /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc linker (/home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld) supports shared libraries... yes
checking dynamic linker characteristics... Android linker
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... no
checking whether to build static libraries... yes
checking whether ln -s works... yes
checking for arm-linux-androideabi-pkg-config... no
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking size of size_t... 4
checking whether compiler supports pointers to undefined structures... yes
checking whether __SUNPRO_C is declared... no
checking for ANSI C header files... (cached) yes
checking stddef.h usability... yes
checking stddef.h presence... yes
checking for stddef.h... yes
checking for stdlib.h... (cached) yes
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking for string.h... (cached) yes
checking for sys/types.h... (cached) yes
checking for an ANSI C-conforming const... yes
checking whether char is unsigned... yes
checking for inline... inline
checking for size_t... yes
checking for unsigned char... yes
checking for unsigned short... yes
checking if right shift is signed... Assuming that right shift is signed on target machine.
checking for memset... yes
checking for memcpy... yes
checking libjpeg API version... 6.2
checking whether to include in-memory source/destination managers... yes
checking libjpeg shared library version... 62.2.0
checking whether the linker supports version scripts... yes (GNU style)
checking whether to use version script when building libjpeg-turbo... yes
checking for inline... inline __attribute__((always_inline))
checking whether to include arithmetic encoding support... yes
checking whether to include arithmetic decoding support... yes
checking whether to use 12-bit samples... no
checking whether to build TurboJPEG C wrapper... yes
checking whether to build TurboJPEG Java wrapper... no
checking if we have SIMD optimisations for cpu type... yes (arm)
checking if the assembler is GNU-compatible and can be used... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating pkgscripts/libjpeg-turbo.spec.tmpl
config.status: creating pkgscripts/makecygwinpkg.tmpl
config.status: creating pkgscripts/makedpkg.tmpl
config.status: creating pkgscripts/makemacpkg.tmpl
config.status: creating pkgscripts/uninstall.tmpl
config.status: creating pkgscripts/libjpeg.pc
config.status: creating pkgscripts/libturbojpeg.pc
config.status: creating tjbenchtest
config.status: creating libjpeg.map
config.status: creating Makefile
config.status: creating simd/Makefile
config.status: creating java/Makefile
config.status: creating md5/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: creating jconfig.h
config.status: jconfig.h is unchanged
config.status: creating jconfigint.h
config.status: jconfigint.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands
make  all-recursive
make[1]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
Making all in java
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
Making all in simd
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make  all-am
make[3]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[3]: Nothing to be done for 'all-am'.
make[3]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
Making all in md5
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
  CC       jmemmgr.lo
jmemmgr.c: In function 'realize_virt_arrays':
jmemmgr.c:659:11: error: 'SIZE_MAX' undeclared (first use in this function)
       if (SIZE_MAX - maximum_space < new_space)
           ^
jmemmgr.c:659:11: note: each undeclared identifier is reported only once for each function it appears in
Makefile:1170: recipe for target 'jmemmgr.lo' failed
make[2]: *** [jmemmgr.lo] Error 1
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
Makefile:2031: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
Makefile:790: recipe for target 'all' failed
make: *** [all] Error 2
Making install in java
make[1]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
make[1]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
Making install in simd
make[1]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make  install-am
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[3]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[3]: Nothing to be done for 'install-exec-am'.
make[3]: Nothing to be done for 'install-data-am'.
make[3]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[1]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
Making install in md5
make[1]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[1]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[1]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
  CC       jmemmgr.lo
jmemmgr.c: In function 'realize_virt_arrays':
jmemmgr.c:659:11: error: 'SIZE_MAX' undeclared (first use in this function)
       if (SIZE_MAX - maximum_space < new_space)
           ^
jmemmgr.c:659:11: note: each undeclared identifier is reported only once for each function it appears in
Makefile:1170: recipe for target 'jmemmgr.lo' failed
make[1]: *** [jmemmgr.lo] Error 1
make[1]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
Makefile:2031: recipe for target 'install-recursive' failed
make: *** [install-recursive] Error 1
bindesh@bindesh-Satellite-C650D:/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1$ sh AndroidBuild.sh 
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-linux-androideabi-strip... no
checking for strip... strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking for style of include used by make... GNU
checking for arm-linux-androideabi-gcc... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... yes
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc accepts -g... yes
checking for /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc option to accept ISO C89... none needed
checking whether /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc understands -c and -o together... yes
checking dependency style of /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc... gcc3
checking how to run the C preprocessor... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-cpp
checking for arm-linux-androideabi-gcc... (cached) /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc accepts -g... (cached) yes
checking for /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc option to accept ISO C89... (cached) none needed
checking whether /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc understands -c and -o together... (cached) yes
checking dependency style of /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc... (cached) gcc3
checking for arm-linux-androideabi-ar... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
checking the archiver (/home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar) interface... ar
checking dependency style of /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc... gcc3
checking build system type... x86_64-unknown-linux-gnu
checking host system type... arm-unknown-linux-androideabi
checking how to print strings... printf
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for fgrep... /bin/grep -F
checking for ld used by /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld
checking if the linker (/home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm
checking the name lister (/home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-unknown-linux-gnu file names to arm-unknown-linux-androideabi format... func_convert_file_noop
checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld option to reload object files... -r
checking for arm-linux-androideabi-objdump... no
checking for objdump... objdump
configure: WARNING: using cross tools not prefixed with host triplet
checking how to recognize dependent libraries... pass_all
checking for arm-linux-androideabi-dlltool... no
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for arm-linux-androideabi-ar... (cached) /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
checking for archiver @FILE support... @
checking for arm-linux-androideabi-strip... strip
checking for arm-linux-androideabi-ranlib... /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ranlib
checking command to parse /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm output from /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc object... ok
checking for sysroot... /home/bindesh/bin/ndk//platforms/android-9/arch-arm
checking for a working dd... /bin/dd
checking how to truncate binary pipes... /bin/dd bs=4096 count=1
checking for arm-linux-androideabi-mt... no
checking for mt... mt
checking if mt is a manifest tool... no
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc supports -fno-rtti -fno-exceptions... no
checking for /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc option to produce PIC... -fPIC -DPIC
checking if /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc PIC flag -fPIC -DPIC works... yes
checking if /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc static flag -static works... yes
checking if /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc supports -c -o file.o... yes
checking if /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc supports -c -o file.o... (cached) yes
checking whether the /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc linker (/home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld) supports shared libraries... yes
checking dynamic linker characteristics... Android linker
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... no
checking whether to build static libraries... yes
checking whether ln -s works... yes
checking for arm-linux-androideabi-pkg-config... no
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking size of size_t... 4
checking whether compiler supports pointers to undefined structures... yes
checking whether __SUNPRO_C is declared... no
checking for ANSI C header files... (cached) yes
checking stddef.h usability... yes
checking stddef.h presence... yes
checking for stddef.h... yes
checking for stdlib.h... (cached) yes
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking for string.h... (cached) yes
checking for sys/types.h... (cached) yes
checking for an ANSI C-conforming const... yes
checking whether char is unsigned... yes
checking for inline... inline
checking for size_t... yes
checking for unsigned char... yes
checking for unsigned short... yes
checking if right shift is signed... Assuming that right shift is signed on target machine.
checking for memset... yes
checking for memcpy... yes
checking libjpeg API version... 6.2
checking whether to include in-memory source/destination managers... yes
checking libjpeg shared library version... 62.2.0
checking whether the linker supports version scripts... yes (GNU style)
checking whether to use version script when building libjpeg-turbo... yes
checking for inline... inline __attribute__((always_inline))
checking whether to include arithmetic encoding support... yes
checking whether to include arithmetic decoding support... yes
checking whether to use 12-bit samples... no
checking whether to build TurboJPEG C wrapper... yes
checking whether to build TurboJPEG Java wrapper... no
checking if we have SIMD optimisations for cpu type... yes (arm)
checking if the assembler is GNU-compatible and can be used... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating pkgscripts/libjpeg-turbo.spec.tmpl
config.status: creating pkgscripts/makecygwinpkg.tmpl
config.status: creating pkgscripts/makedpkg.tmpl
config.status: creating pkgscripts/makemacpkg.tmpl
config.status: creating pkgscripts/uninstall.tmpl
config.status: creating pkgscripts/libjpeg.pc
config.status: creating pkgscripts/libturbojpeg.pc
config.status: creating tjbenchtest
config.status: creating libjpeg.map
config.status: creating Makefile
config.status: creating simd/Makefile
config.status: creating java/Makefile
config.status: creating md5/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: creating jconfig.h
config.status: jconfig.h is unchanged
config.status: creating jconfigint.h
config.status: jconfigint.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands
make  all-recursive
make[1]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
Making all in java
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
Making all in simd
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make  all-am
make[3]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[3]: Nothing to be done for 'all-am'.
make[3]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
Making all in md5
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
  CC       jmemmgr.lo
  CC       jmemnobs.lo
  CC       jaricom.lo
  CC       jcarith.lo
  CC       jdarith.lo
  CCLD     libjpeg.la
  CC       libturbojpeg_la-jcapimin.lo
  CC       libturbojpeg_la-jcapistd.lo
  CC       libturbojpeg_la-jccoefct.lo
  CC       libturbojpeg_la-jccolor.lo
  CC       libturbojpeg_la-jcdctmgr.lo
  CC       libturbojpeg_la-jchuff.lo
  CC       libturbojpeg_la-jcinit.lo
  CC       libturbojpeg_la-jcmainct.lo
  CC       libturbojpeg_la-jcmarker.lo
  CC       libturbojpeg_la-jcmaster.lo
  CC       libturbojpeg_la-jcomapi.lo
  CC       libturbojpeg_la-jcparam.lo
  CC       libturbojpeg_la-jcphuff.lo
  CC       libturbojpeg_la-jcprepct.lo
  CC       libturbojpeg_la-jcsample.lo
  CC       libturbojpeg_la-jctrans.lo
  CC       libturbojpeg_la-jdapimin.lo
  CC       libturbojpeg_la-jdapistd.lo
  CC       libturbojpeg_la-jdatadst.lo
  CC       libturbojpeg_la-jdatasrc.lo
  CC       libturbojpeg_la-jdcoefct.lo
  CC       libturbojpeg_la-jdcolor.lo
  CC       libturbojpeg_la-jddctmgr.lo
  CC       libturbojpeg_la-jdhuff.lo
  CC       libturbojpeg_la-jdinput.lo
  CC       libturbojpeg_la-jdmainct.lo
  CC       libturbojpeg_la-jdmarker.lo
  CC       libturbojpeg_la-jdmaster.lo
  CC       libturbojpeg_la-jdmerge.lo
  CC       libturbojpeg_la-jdphuff.lo
  CC       libturbojpeg_la-jdpostct.lo
  CC       libturbojpeg_la-jdsample.lo
  CC       libturbojpeg_la-jdtrans.lo
  CC       libturbojpeg_la-jerror.lo
  CC       libturbojpeg_la-jfdctflt.lo
  CC       libturbojpeg_la-jfdctfst.lo
  CC       libturbojpeg_la-jfdctint.lo
  CC       libturbojpeg_la-jidctflt.lo
  CC       libturbojpeg_la-jidctfst.lo
  CC       libturbojpeg_la-jidctint.lo
  CC       libturbojpeg_la-jidctred.lo
  CC       libturbojpeg_la-jquant1.lo
  CC       libturbojpeg_la-jquant2.lo
  CC       libturbojpeg_la-jutils.lo
  CC       libturbojpeg_la-jmemmgr.lo
  CC       libturbojpeg_la-jmemnobs.lo
  CC       libturbojpeg_la-jaricom.lo
  CC       libturbojpeg_la-jcarith.lo
  CC       libturbojpeg_la-jdarith.lo
  CC       libturbojpeg_la-turbojpeg.lo
  CC       libturbojpeg_la-transupp.lo
  CC       libturbojpeg_la-jdatadst-tj.lo
  CC       libturbojpeg_la-jdatasrc-tj.lo
  CCLD     libturbojpeg.la
  CC       cjpeg-cdjpeg.o
  CC       cjpeg-cjpeg.o
  CC       cjpeg-rdgif.o
  CC       cjpeg-rdppm.o
  CC       cjpeg-rdswitch.o
  CC       cjpeg-rdbmp.o
  CC       cjpeg-rdtarga.o
  CCLD     cjpeg
  CC       djpeg-cdjpeg.o
  CC       djpeg-djpeg.o
  CC       djpeg-rdcolmap.o
  CC       djpeg-rdswitch.o
  CC       djpeg-wrgif.o
  CC       djpeg-wrppm.o
  CC       djpeg-wrbmp.o
  CC       djpeg-wrtarga.o
  CCLD     djpeg
  CC       jpegtran.o
  CC       rdswitch.o
  CC       cdjpeg.o
  CC       transupp.o
  CCLD     jpegtran
  CC       rdjpgcom.o
  CCLD     rdjpgcom
  CC       wrjpgcom.o
  CCLD     wrjpgcom
  CC       tjbench-tjbench.o
  CC       tjbench-bmp.o
  CC       tjbench-tjutil.o
  CC       tjbench-rdbmp.o
  CC       tjbench-rdppm.o
  CC       tjbench-wrbmp.o
  CC       tjbench-wrppm.o
  CCLD     tjbench
  CC       jcstest.o
  CCLD     jcstest
  CC       tjunittest.o
  CC       tjutil.o
  CCLD     tjunittest
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
make[1]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
Making install in java
make[1]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
make[1]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/java'
Making install in simd
make[1]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make  install-am
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[3]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[3]: Nothing to be done for 'install-exec-am'.
make[3]: Nothing to be done for 'install-data-am'.
make[3]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
make[1]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/simd'
Making install in md5
make[1]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[1]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/md5'
make[1]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
make[2]: Entering directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
 /bin/mkdir -p '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib'
 /bin/bash ./libtool   --mode=install /usr/bin/install -c   libjpeg.la libturbojpeg.la '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib'
libtool: install: /usr/bin/install -c .libs/libjpeg.lai /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib/libjpeg.la
libtool: install: /usr/bin/install -c .libs/libturbojpeg.lai /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib/libturbojpeg.la
libtool: install: /usr/bin/install -c .libs/libjpeg.a /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib/libjpeg.a
libtool: install: chmod 644 /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib/libjpeg.a
libtool: install: /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ranlib /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib/libjpeg.a
libtool: install: /usr/bin/install -c .libs/libturbojpeg.a /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib/libturbojpeg.a
libtool: install: chmod 644 /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib/libturbojpeg.a
libtool: install: /home/bindesh/bin/ndk//toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ranlib /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib/libturbojpeg.a
 /bin/mkdir -p '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/bin'
  /bin/bash ./libtool   --mode=install /usr/bin/install -c cjpeg djpeg jpegtran rdjpgcom wrjpgcom tjbench '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/bin'
libtool: install: /usr/bin/install -c cjpeg /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/bin/cjpeg
libtool: install: /usr/bin/install -c djpeg /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/bin/djpeg
libtool: install: /usr/bin/install -c jpegtran /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/bin/jpegtran
libtool: install: /usr/bin/install -c rdjpgcom /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/bin/rdjpgcom
libtool: install: /usr/bin/install -c wrjpgcom /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/bin/wrjpgcom
libtool: install: /usr/bin/install -c tjbench /media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/bin/tjbench
 /bin/mkdir -p '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/share/doc/libjpeg-turbo'
 /usr/bin/install -c -m 644 README.ijg README.md libjpeg.txt structure.txt usage.txt wizard.txt LICENSE.md '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/share/doc/libjpeg-turbo'
 /bin/mkdir -p '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/share/doc/libjpeg-turbo'
 /usr/bin/install -c -m 644 example.c '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/share/doc/libjpeg-turbo'
 /bin/mkdir -p '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/include'
 /usr/bin/install -c -m 644 jerror.h jmorecfg.h jpeglib.h turbojpeg.h '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/include'
 /bin/mkdir -p '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/share/man/man1'
 /usr/bin/install -c -m 644 cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1 '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/share/man/man1'
 /bin/mkdir -p '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/include'
 /usr/bin/install -c -m 644 jconfig.h '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/include'
 /bin/mkdir -p '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib/pkgconfig'
 /usr/bin/install -c -m 644 pkgscripts/libjpeg.pc pkgscripts/libturbojpeg.pc '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1/prefix/lib/pkgconfig'
make[2]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'
make[1]: Leaving directory '/media/bindesh/WORK/Software/libraries/libjpeg-turbo-1.5.1'