[Android Software/Hacking General [Developers Only]] JackpotClavin:
https://github.com/JackpotClavin/Android-Blob-Utility

The purpose of this program is to help AOSP-based ROM developers quickly and easily find out which proprietary blobs need to be copied into the ROM's build, or built using source. How the program works is you do a /system dump into a folder on a Linux computer. Then you make the program using the 'make' command; then you can run it.

First off, the program will ask you what the sdk version of the /system dump you pulled happens to be. For example, if your /system dump is Android 4.3, and intend port a 4.3-based ROM, then enter 18 and press enter.

When it prompts you for location of the /system dump you pulled, if the location of the build.prop of the /system dump is under:

/home/user/backup/dump/system/build.prop

then just use:

/home/user/backup/dump/system

The program will now ask you for your device's manufacturer's name, and the device's name. For my Verizon LG G2, I entered "lge" and "vs980" respectively.

The utility then will ask you how many files you wish to run through the program. In the case of my LG G2, the KitKat build requires two main proprietary camera-related libraries to run (/system/bin/mm-qcamera-daemon and

/system/lib/hw/camera.msm8974.so).

So I typed in 2 and pressed enter (because I'm running two proprietary files through the program)

Then simply typed in:

/home/user/backup/dump/system/bin/mm-qcamera-daemon

and pressed enter and it printed out *every* file needed to get /system/bin/mm-qcamera-daemon running (the file might be proprietary, or it can be built from source).

Then it asked for the final proprietary file, so I simply typed in:

/home/user/backup/dump/system/lib/hw/camera.msm8974.so

and pressed enter and it printed out *every* file needed to get /system/lib/hw/camera.msm8974.so running (the file might be proprietary, or it can be built from source).

An example usage of this program can be found here: https://raw.githubusercontent.com/JackpotClavin/Android-Blob-Utility/master/Example_Usage.txt

That's 106 proprietary blobs done in a flash!

The beauty of this program is that it's recursive, so if proprietary file 'A' needs proprietary file 'B' to run, but proprietary file 'B' needs proprietary file 'C' to run, which in turn needs 'D' to run, then simply entering proprietary file A to run will print out all A, B, C, and D nicely formatted so that you can simply copy the output and place it in a file under vendor/manufacturer/codename/codename-vendor-blobs.mk file in your AOSP build source tree's root.

Another great thing about this program is that it doesn't just catch the libraries needed to satisfy the linker, but rather, it will also print out those libraries that are called within the actual code of the library itself, like:

dlopen("libfoo.so", RTLD_NOW);

libfoo.so is not marked as a shared library, so the linker won't complain that libfoo.so is missing, and there might be no sign that libfoo.so missing and needed, but when it's time for the daemon or library to run, it won't show any sign that something is wrong, until you see that it doesn't work. This program will catch and display that libfoo.so is needed.

So basically:

1. Extract /system dump image

2. Tell program the SDK version of your /system dump

3. Tell program the location of your /system dump

4. Tell the program your device's manufacturer's name

5. Tell the program your device's codename

6. Tell program how many files you wish to run through the utility

7. Tell program the location of the file(s) you wish to run through the program.

8. Copy the output of the utility to a text file under vendor/manufacturer/codename/codename-vendor-blobs.mk