├── .gitignore
├── README.md
├── android10_debug_init.diff
├── blobs.sh
├── blobutil
├── .gitignore
├── Android.mk.disabled
├── Example_Usage.txt
├── LICENSE
├── Makefile
├── README.md
├── android-blob-utility.c
├── android-blob-utility.h
└── emulator_systems
│ ├── sdk_14.txt
│ ├── sdk_15.txt
│ ├── sdk_16.txt
│ ├── sdk_17.txt
│ ├── sdk_18.txt
│ ├── sdk_19.txt
│ ├── sdk_20.txt
│ ├── sdk_21.txt
│ └── sdk_22.txt
├── build_prepare.sh
├── cherrypicker.py
├── codereview
├── bracechecker.c
├── bracechecker.py
└── bracechecker.sh
├── gen_simple_dl-stats.sh
├── jenkins
└── build.sh
├── kernel-upstreaming
├── README.md
└── linux-stable.sh
├── memcheck.sh
├── mkbootimg_tools
├── ARM
│ ├── README.md
│ ├── bash
│ ├── cpio
│ ├── file
│ ├── grep
│ ├── gzip
│ ├── lz4
│ ├── lzma
│ ├── lzop
│ ├── magic.mgc
│ ├── mkboot
│ ├── mkbootfs
│ ├── mkbootimg
│ ├── od
│ ├── wrapper
│ └── xz
├── README.md
├── dtbTool
├── dtbToolCM
├── dtbtool.txt
├── dtc
├── lz4
├── mkboot
├── mkbootfs
└── mkbootimg
├── print-bootloader-id.sh
├── raw_resources.bin
├── rawresources.py
├── sign
├── README.md
├── make_key
├── sign_generate_keys.sh
└── sign_set_keysdir.sh
├── start_android_env.sh
├── strace.bin
├── twrp_bench.sh
├── universalbuilder.sh
└── xtrasforcherrypicker.py
/.gitignore:
--------------------------------------------------------------------------------
1 | *.log
2 | out/
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # android_buildtools
2 | My build tools for developing android
3 |
4 | ### sign/
5 |
6 | check the [README](https://github.com/sfX-android/android_buildtools/tree/main/sign) in that directory
7 |
8 | ### blobs.sh
9 |
10 | THE tool to find blob dependencies! Ever tried to bring-up a custom ROM for a device? you WILL get trouble to get everything working without proprietary (aka blobs) binaries from the STOCK ROM. as these have dependencies with libraries you can easily come into a situation where you need to grab 10 libs for 1 blob. finding these is always annoying as you either need to grab the logs again and again or using strace again and again.
11 |
12 | -> not needed anymore as blobs.sh will do that all for you - right from your linux system - so even before including them in your next build :)
13 |
14 | ### memcheck.sh
15 |
16 | Simple RAM watcher for manually optimizing RAM usage. It was created to monitor the RAM usage during a ROM build in order to find the max used RAM amount during building Android.
17 |
18 | ### twrp_bench.sh
19 |
20 | an incredible cool benchmark tool which runs a TWRP backup and measures its speed and performance.
21 |
22 | Things you can adjust are:
23 |
24 | * read_ahead_kb
25 | * cpu governor
26 | * I/O scheduler
27 |
28 | It was written to get an idea which combination of the above would be best and it was used on several file systems as well (f2fs, ext4 etc)
29 |
30 | ### print-bootloader-id.sh
31 |
32 | example:
33 | ```
34 | BOOTLOADER minimal ID
35 | AC2F6121
36 |
37 | BOOTLOADER full ID:
38 | AC2F6121652F3607
39 | 71EEB5510F6DB2D2
40 | 9CB444CE23F8A64E
41 | 9D1FDB7175432C32
42 | ```
43 |
44 | ### cherrypicker.py (+xtrasforcherrypicker.py)
45 |
46 | generates a list of repopicks from a gerrit server. mandatory part of ASB patching in e.g. my [build automation](https://github.com/sfX-android/automation_scripts/blob/ansible/roles/common/tasks/secpatch.yml).
47 |
48 | forked from https://github.com/GeoZac/android_vendor_unconv
49 |
50 | ```
51 | python3 cherrypicker.py -R los -B {{ sec_patch_pick_branch }} -Q 'topic:Q_asb_2025-01'
52 | ```
53 |
54 | # legacy
55 |
56 | ### start_android_env.sh
57 |
58 | Starts a valid Android/TWRP build environment on Arch Linux based on python virtualenv. should be migrated to python3 btw.. but as I stopped using it on my desktop system that might not happen
59 |
60 | ### build_prepare.sh
61 |
62 | made to get a clean state before building. superseeded by Jenkins later .. and now by [Ansible](https://github.com/sfX-android/automation_scripts)
63 |
64 | ### universalbuilder.sh
65 |
66 | made some decades ago to build for several devices which all have their own shit. Parts of it can be found in [extendrom](https://github.com/sfX-android/android_vendor_extendrom) now.
67 |
68 | ### blobutil/
69 |
70 | superseeded by blobs.sh (see above). it was a way to find dependencies of blobs.
71 |
--------------------------------------------------------------------------------
/android10_debug_init.diff:
--------------------------------------------------------------------------------
1 |
2 | project system/core/
3 | diff --git a/system/core/init/Android.mk b/system/core/init/Android.mk
4 | index c4f7d34..6fea638 100644
5 | --- a/system/core/init/Android.mk
6 | +++ b/system/core/init/Android.mk
7 | @@ -10,7 +10,7 @@ ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
8 | init_options += \
9 | -DALLOW_LOCAL_PROP_OVERRIDE=1 \
10 | -DALLOW_PERMISSIVE_SELINUX=1 \
11 | - -DREBOOT_BOOTLOADER_ON_PANIC=1 \
12 | + -DREBOOT_BOOTLOADER_ON_PANIC=0 \
13 | -DWORLD_WRITABLE_KMSG=1 \
14 | -DDUMP_ON_UMOUNT_FAILURE=1
15 | else
16 | diff --git a/system/core/init/first_stage_init.cpp b/system/core/init/first_stage_init.cpp
17 | index 2b89940..2a03a15 100644
18 | --- a/system/core/init/first_stage_init.cpp
19 | +++ b/system/core/init/first_stage_init.cpp
20 | @@ -130,7 +130,6 @@ int FirstStageMain(int argc, char** argv) {
21 | CHECKCALL(setgroups(arraysize(groups), groups));
22 | CHECKCALL(mount("sysfs", "/sys", "sysfs", 0, NULL));
23 | CHECKCALL(mount("selinuxfs", "/sys/fs/selinux", "selinuxfs", 0, NULL));
24 | -
25 | CHECKCALL(mknod("/dev/kmsg", S_IFCHR | 0600, makedev(1, 11)));
26 |
27 | if constexpr (WORLD_WRITABLE_KMSG) {
28 | @@ -167,6 +166,9 @@ int FirstStageMain(int argc, char** argv) {
29 | "mode=0755,uid=0,gid=0"));
30 | #undef CHECKCALL
31 |
32 | + auto result = WriteFile("/sys/class/leds/green/brightness", "0");
33 | + result = WriteFile("/sys/class/leds/blue/brightness", "0");
34 | + result = WriteFile("/sys/class/leds/red/brightness", "0");
35 | SetStdioToDevNull(argv);
36 | // Now that tmpfs is mounted on /dev and we have /dev/kmsg, we can actually
37 | // talk to the outside world...
38 | @@ -175,20 +177,26 @@ int FirstStageMain(int argc, char** argv) {
39 | if (!errors.empty()) {
40 | for (const auto& [error_string, error_errno] : errors) {
41 | LOG(ERROR) << error_string << " " << strerror(error_errno);
42 | + //char *myerrno = strerror(error_errno);
43 | + //result = WriteFile("/cache/init_error_" + myerrno + ".log", error_string);
44 | + result = WriteFile("/cache/init_error.log", error_string);
45 | }
46 | LOG(FATAL) << "Init encountered errors starting first stage, aborting";
47 | }
48 |
49 | LOG(INFO) << "init first stage started!";
50 | + result = WriteFile("/cache/init_start.log", "first stage started");
51 |
52 | auto old_root_dir = std::unique_ptr
{opendir("/"), closedir};
53 | if (!old_root_dir) {
54 | PLOG(ERROR) << "Could not opendir(\"/\"), not freeing ramdisk";
55 | + result = WriteFile("/cache/init.old_root_dir.log", "Could not opendir, not freeing ramdisk");
56 | }
57 |
58 | struct stat old_root_info;
59 | if (stat("/", &old_root_info) != 0) {
60 | PLOG(ERROR) << "Could not stat(\"/\"), not freeing ramdisk";
61 | + result = WriteFile("/cache/init.old_root_info.log", "1 not freeing ramdisk");
62 | old_root_dir.reset();
63 | }
64 |
65 | @@ -209,19 +217,21 @@ int FirstStageMain(int argc, char** argv) {
66 | if (!fs::copy_file("/adb_debug.prop", kDebugRamdiskProp, ec) ||
67 | !fs::copy_file("/userdebug_plat_sepolicy.cil", kDebugRamdiskSEPolicy, ec)) {
68 | LOG(ERROR) << "Failed to setup debug ramdisk";
69 | + result = WriteFile("/cache/init.force_debuggable.log", "Failed to setup debug ramdisk");
70 | } else {
71 | // setenv for second-stage init to read above kDebugRamdisk* files.
72 | setenv("INIT_FORCE_DEBUGGABLE", "true", 1);
73 | }
74 | }
75 | -
76 | if (!DoFirstStageMount()) {
77 | LOG(FATAL) << "Failed to mount required partitions early ...";
78 | + result = WriteFile("/cache/init.DoFirstStageMount.log", "Failed to mount required partitions early ...");
79 | }
80 |
81 | struct stat new_root_info;
82 | if (stat("/", &new_root_info) != 0) {
83 | PLOG(ERROR) << "Could not stat(\"/\"), not freeing ramdisk";
84 | + result = WriteFile("/cache/init.new_root_info.log", "not freeing ramdisk");
85 | old_root_dir.reset();
86 | }
87 |
88 | @@ -235,13 +245,27 @@ int FirstStageMain(int argc, char** argv) {
89 | uint64_t start_ms = start_time.time_since_epoch().count() / kNanosecondsPerMillisecond;
90 | setenv("INIT_STARTED_AT", std::to_string(start_ms).c_str(), 1);
91 |
92 | + result = WriteFile("/sys/class/leds/blue/brightness", "0");
93 | + result = WriteFile("/sys/class/leds/red/brightness", "0");
94 | + result = WriteFile("/sys/class/leds/green/brightness", "255");
95 | + sleep(1);
96 | + result = WriteFile("/cache/init_end.log", "first stage finished, starting selinux_setup");
97 | + sleep(3);
98 | + // enforce a kernel panic
99 | + //result = WriteFile("/proc/sysrq-trigger", "c");
100 | +
101 | const char* path = "/system/bin/init";
102 | + //const char* path = "/init";
103 | const char* args[] = {path, "selinux_setup", nullptr};
104 | execv(path, const_cast(args));
105 |
106 | // execv() only returns if an error happened, in which case we
107 | // panic and never fall through this conditional.
108 | PLOG(FATAL) << "execv(\"" << path << "\") failed";
109 | + result = WriteFile("/sys/class/leds/blue/brightness", "255");
110 | + result = WriteFile("/sys/class/leds/red/brightness", "255");
111 | + result = WriteFile("/sys/class/leds/green/brightness", "255");
112 | + sleep(3);
113 |
114 | return 1;
115 | }
116 | diff --git a/system/core/init/first_stage_mount.cpp b/system/core/init/first_stage_mount.cpp
117 | index 3e76556..b87f24d 100644
118 | --- a/system/core/init/first_stage_mount.cpp
119 | +++ b/system/core/init/first_stage_mount.cpp
120 | @@ -495,6 +495,10 @@ bool FirstStageMount::MountPartition(const Fstab::iterator& begin, bool erase_sa
121 | // this case, we mount system first then pivot to it. From that point on,
122 | // we are effectively identical to a system-as-root device.
123 | bool FirstStageMount::TrySwitchSystemAsRoot() {
124 | + auto result = WriteFile("/sys/class/leds/green/brightness", "0");
125 | + result = WriteFile("/sys/class/leds/red/brightness", "255");
126 | + result = WriteFile("/sys/class/leds/blue/brightness", "0");
127 | + sleep(3);
128 | auto metadata_partition = std::find_if(fstab_.begin(), fstab_.end(), [](const auto& entry) {
129 | return entry.mount_point == "/metadata";
130 | });
131 | @@ -520,7 +524,6 @@ bool FirstStageMount::TrySwitchSystemAsRoot() {
132 | PLOG(ERROR) << "Failed to mount /system";
133 | return false;
134 | }
135 | -
136 | return true;
137 | }
138 |
139 | diff --git a/system/core/init/main.cpp b/system/core/init/main.cpp
140 | index 2ce46ef..8a68f77 100644
141 | --- a/system/core/init/main.cpp
142 | +++ b/system/core/init/main.cpp
143 | @@ -20,6 +20,7 @@
144 | #include "selinux.h"
145 | #include "subcontext.h"
146 | #include "ueventd.h"
147 | +#include "util.h"
148 |
149 | #include
150 |
151 | @@ -53,6 +54,11 @@ int main(int argc, char** argv) {
152 | __asan_set_error_report_callback(AsanReportCallback);
153 | #endif
154 |
155 | + auto result = WriteFile("/sys/class/leds/blue/brightness", "0");
156 | + result = WriteFile("/sys/class/leds/red/brightness", "255");
157 | + result = WriteFile("/sys/class/leds/green/brightness", "255");
158 | + sleep(3);
159 | +
160 | if (!strcmp(basename(argv[0]), "ueventd")) {
161 | return ueventd_main(argc, argv);
162 | }
163 | diff --git a/system/core/init/reboot_utils.cpp b/system/core/init/reboot_utils.cpp
164 | index d1a712f..e79b634 100644
165 | --- a/system/core/init/reboot_utils.cpp
166 | +++ b/system/core/init/reboot_utils.cpp
167 | @@ -32,7 +32,7 @@
168 | namespace android {
169 | namespace init {
170 |
171 | -static std::string init_fatal_reboot_target = "bootloader";
172 | +static std::string init_fatal_reboot_target = "recovery";
173 |
174 | void SetFatalRebootTarget() {
175 | std::string cmdline;
176 | diff --git a/system/core/init/selinux.cpp b/system/core/init/selinux.cpp
177 | index 86238b4..9b13063 100644
178 | --- a/system/core/init/selinux.cpp
179 | +++ b/system/core/init/selinux.cpp
180 | @@ -517,6 +517,11 @@ int SelinuxGetVendorAndroidVersion() {
181 |
182 | // This function initializes SELinux then execs init to run in the init SELinux context.
183 | int SetupSelinux(char** argv) {
184 | + auto result = WriteFile("/sys/class/leds/green/brightness", "102");
185 | + result = WriteFile("/sys/class/leds/blue/brightness", "255");
186 | + result = WriteFile("/sys/class/leds/red/brightness", "178");
187 | + sleep(3);
188 | +
189 | InitKernelLogging(argv);
190 |
191 | if (REBOOT_BOOTLOADER_ON_PANIC) {
192 |
--------------------------------------------------------------------------------
/blobs.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | ###########################################################################################
3 | #
4 | # parses a blob and prints all its dependencies - and dependencies of those, too
5 | #
6 | # Copyright 2020-2023: steadfasterX
7 | #
8 | ###########################################################################################
9 |
10 | [ -z "$DEBUG" ] && DEBUG=0
11 | spath="$1"
12 | FOUND="$2"
13 | BLOBS=()
14 |
15 | if [ -z "$spath" ]||[ ! -f "$FOUND" ];then echo "ERROR. usage: $0 "; exit 4;fi
16 |
17 | lib_lookup() {
18 | readelf -d $1 | grep NEEDED | cut -d "[" -f2 | cut -d"]" -f 1
19 | }
20 |
21 | so_search() {
22 | for file in `lib_lookup $1`; do
23 | find $spath -iname "$file" 2>/dev/null
24 | done
25 | }
26 |
27 | global_search() {
28 | RESULT=$(so_search $1 | grep -Ev "^${FOUND}" | grep -v "libc.so\|libdl.so\|libc++.so\|libm.so\|liblog.so\|libcutils.so")
29 | for blob in `echo -n $RESULT`; do
30 | CNT=$((CNT+1))
31 | echo $blob
32 | FOUND=$1\|$FOUND
33 | BLOBS[1]+="$blob "
34 | global_search $blob
35 | [ $CNT -gt 20 ] && break
36 | done
37 | }
38 |
39 | [ "$DEBUG" -eq 1 ] && echo "starting search on $spath for $FOUND"
40 | global_search "$FOUND"
41 |
--------------------------------------------------------------------------------
/blobutil/.gitignore:
--------------------------------------------------------------------------------
1 | # make files created after build
2 | android-blob-utility
3 | android-blob-utility.o
4 |
--------------------------------------------------------------------------------
/blobutil/Android.mk.disabled:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2014 JackpotClavin
3 | #
4 | # Android Blob Utility
5 | #
6 |
7 | LOCAL_PATH:= $(call my-dir)
8 | include $(CLEAR_VARS)
9 |
10 | LOCAL_SRC_FILES := android-blob-utility.c
11 |
12 | LOCAL_CFLAGS += -DSYSTEM_DUMP_SDK_VERSION=$(SYSTEM_DUMP_SDK_VERSION)
13 |
14 | LOCAL_MODULE := android-blob-utility
15 |
16 | include $(BUILD_HOST_EXECUTABLE)
17 |
--------------------------------------------------------------------------------
/blobutil/Example_Usage.txt:
--------------------------------------------------------------------------------
1 | Example program usage:
2 | JPC@ThinkPad-X220 ~ $ ./android-blob-utility
3 | System dump SDK version?
4 | See: https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels
5 | > 19
6 | System dump root?
7 | > /home/android/dump
8 | How many files?
9 | > 2
10 | Files to go: 2
11 | File name?
12 | > /home/android/dump/bin/mm-qcamera-daemon
13 | vendor/manufacturer/device/proprietary/vendor/lib/liboemcamera.so:system/vendor/lib/liboemcamera.so
14 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera2_stats_modules.so:system/vendor/lib/libmmcamera2_stats_modules.so
15 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera2_stats_algorithm.so:system/vendor/lib/libmmcamera2_stats_algorithm.so
16 | vendor/manufacturer/device/proprietary/vendor/lib/libsensor1.so:system/vendor/lib/libsensor1.so
17 | vendor/manufacturer/device/proprietary/vendor/lib/libqmi_encdec.so:system/vendor/lib/libqmi_encdec.so
18 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera2_iface_modules.so:system/vendor/lib/libmmcamera2_iface_modules.so
19 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera2_isp_modules.so:system/vendor/lib/libmmcamera2_isp_modules.so
20 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera_tintless_algo.so:system/vendor/lib/libmmcamera_tintless_algo.so
21 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera_tintless_bg_pca_algo.so:system/vendor/lib/libmmcamera_tintless_bg_pca_algo.so
22 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera2_sensor_modules.so:system/vendor/lib/libmmcamera2_sensor_modules.so
23 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera_imx132.so:system/vendor/lib/libmmcamera_imx132.so
24 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx132_common.so:system/vendor/lib/libchromatix_imx132_common.so
25 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx132_preview.so:system/vendor/lib/libchromatix_imx132_preview.so
26 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx132_default_video.so:system/vendor/lib/libchromatix_imx132_default_video.so
27 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx132_vt.so:system/vendor/lib/libchromatix_imx132_vt.so
28 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx132_mms_video.so:system/vendor/lib/libchromatix_imx132_mms_video.so
29 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera_hdr_gb_lib.so:system/vendor/lib/libmmcamera_hdr_gb_lib.so
30 | vendor/manufacturer/device/proprietary/vendor/lib/libfastcvopt.so:system/vendor/lib/libfastcvopt.so
31 | vendor/manufacturer/device/proprietary/vendor/lib/libOpenCL.so:system/vendor/lib/libOpenCL.so
32 | vendor/manufacturer/device/proprietary/vendor/lib/libllvm-qcom.so:system/vendor/lib/libllvm-qcom.so
33 | vendor/manufacturer/device/proprietary/vendor/lib/libgsl.so:system/vendor/lib/libgsl.so
34 | vendor/manufacturer/device/proprietary/vendor/lib/libCB.so:system/vendor/lib/libCB.so
35 | vendor/manufacturer/device/proprietary/vendor/lib/egl/libGLESv2_adreno.so:system/vendor/lib/egl/libGLESv2_adreno.so
36 | vendor/manufacturer/device/proprietary/vendor/lib/libadreno_utils.so:system/vendor/lib/libadreno_utils.so
37 | vendor/manufacturer/device/proprietary/vendor/lib/egl/libq3dtools_adreno.so:system/vendor/lib/egl/libq3dtools_adreno.so
38 | vendor/manufacturer/device/proprietary/vendor/lib/egl/libGLESv1_CM_adreno.so:system/vendor/lib/egl/libGLESv1_CM_adreno.so
39 | vendor/manufacturer/device/proprietary/vendor/lib/egl/libEGL_adreno.so:system/vendor/lib/egl/libEGL_adreno.so
40 | vendor/manufacturer/device/proprietary/vendor/lib/libOpenVG.so:system/vendor/lib/libOpenVG.so
41 | vendor/manufacturer/device/proprietary/vendor/lib/egl/eglsubAndroid.so:system/vendor/lib/egl/eglsubAndroid.so
42 | warning: blob file libGLESv2S3D_adreno.so missing or broken
43 | vendor/manufacturer/device/proprietary/vendor/lib/libsc-a2xx.so:system/vendor/lib/libsc-a2xx.so
44 | vendor/manufacturer/device/proprietary/vendor/lib/libsc-a3xx.so:system/vendor/lib/libsc-a3xx.so
45 | vendor/manufacturer/device/proprietary/vendor/lib/libadsprpc.so:system/vendor/lib/libadsprpc.so
46 | warning: wildcard lib%s_skel.so missing or broken
47 | vendor/manufacturer/device/proprietary/vendor/lib/libfastcvadsp_stub.so:system/vendor/lib/libfastcvadsp_stub.so
48 | warning: blob file libfcvopt.so missing or broken
49 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera_tuning.so:system/vendor/lib/libmmcamera_tuning.so
50 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera2_pproc_modules.so:system/vendor/lib/libmmcamera2_pproc_modules.so
51 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera2_cpp_module.so:system/vendor/lib/libmmcamera2_cpp_module.so
52 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera2_c2d_module.so:system/vendor/lib/libmmcamera2_c2d_module.so
53 | vendor/manufacturer/device/proprietary/vendor/lib/libC2D2.so:system/vendor/lib/libC2D2.so
54 | vendor/manufacturer/device/proprietary/vendor/lib/libc2d30.so:system/vendor/lib/libc2d30.so
55 | vendor/manufacturer/device/proprietary/vendor/lib/libc2d30-a3xx.so:system/vendor/lib/libc2d30-a3xx.so
56 | vendor/manufacturer/device/proprietary/vendor/lib/libc2d30-a4xx.so:system/vendor/lib/libc2d30-a4xx.so
57 | vendor/manufacturer/device/proprietary/vendor/lib/libc2d2_z180.so:system/vendor/lib/libc2d2_z180.so
58 | warning: blob file libc2d2.so missing or broken
59 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera2_imglib_modules.so:system/vendor/lib/libmmcamera2_imglib_modules.so
60 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera_imglib.so:system/vendor/lib/libmmcamera_imglib.so
61 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera_wavelet_lib.so:system/vendor/lib/libmmcamera_wavelet_lib.so
62 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera_faceproc.so:system/vendor/lib/libmmcamera_faceproc.so
63 | warning: blob file libmmcamera_cac2_lib.so missing or broken
64 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera2_wnr_module.so:system/vendor/lib/libmmcamera2_wnr_module.so
65 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera2_vpe_module.so:system/vendor/lib/libmmcamera2_vpe_module.so
66 | vendor/manufacturer/device/proprietary/lib/libmm-qcamera.so:system/lib/libmm-qcamera.so
67 | vendor/manufacturer/device/proprietary/lib/libmmcamera_interface.so:system/lib/libmmcamera_interface.so
68 | vendor/manufacturer/device/proprietary/lib/libHDR.so:system/lib/libHDR.so
69 | vendor/manufacturer/device/proprietary/lib/libmorpho_noise_reduction.so:system/lib/libmorpho_noise_reduction.so
70 | vendor/manufacturer/device/proprietary/lib/libmorpho_image_stab31.so:system/lib/libmorpho_image_stab31.so
71 | vendor/manufacturer/device/proprietary/lib/libmorpho_movie_stabilization.so:system/lib/libmorpho_movie_stabilization.so
72 | vendor/manufacturer/device/proprietary/lib/libmorpho_video_denoiser.so:system/lib/libmorpho_video_denoiser.so
73 | vendor/manufacturer/device/proprietary/lib/libmmjpeg_interface.so:system/lib/libmmjpeg_interface.so
74 | vendor/manufacturer/device/proprietary/lib/libqomx_core.so:system/lib/libqomx_core.so
75 | vendor/manufacturer/device/proprietary/vendor/lib/libqomx_jpegenc.so:system/vendor/lib/libqomx_jpegenc.so
76 | vendor/manufacturer/device/proprietary/vendor/lib/libmmqjpeg_codec.so:system/vendor/lib/libmmqjpeg_codec.so
77 | vendor/manufacturer/device/proprietary/vendor/lib/libmmjpeg.so:system/vendor/lib/libmmjpeg.so
78 | vendor/manufacturer/device/proprietary/vendor/lib/libjpegehw.so:system/vendor/lib/libjpegehw.so
79 | vendor/manufacturer/device/proprietary/vendor/lib/libjpegdhw.so:system/vendor/lib/libjpegdhw.so
80 | vendor/manufacturer/device/proprietary/vendor/lib/libqomx_jpegdec.so:system/vendor/lib/libqomx_jpegdec.so
81 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera_imx135.so:system/vendor/lib/libmmcamera_imx135.so
82 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_common.so:system/vendor/lib/libchromatix_imx135_common.so
83 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_snapshot.so:system/vendor/lib/libchromatix_imx135_snapshot.so
84 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_default_video.so:system/vendor/lib/libchromatix_imx135_default_video.so
85 | vendor/manufacturer/device/proprietary/lib/libchromatix_imx135_liveshot.so:system/lib/libchromatix_imx135_liveshot.so
86 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_preview.so:system/vendor/lib/libchromatix_imx135_preview.so
87 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_video_qtr.so:system/vendor/lib/libchromatix_imx135_video_qtr.so
88 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_video_dualrec.so:system/vendor/lib/libchromatix_imx135_video_dualrec.so
89 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_hfr_60.so:system/vendor/lib/libchromatix_imx135_hfr_60.so
90 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_mms_video.so:system/vendor/lib/libchromatix_imx135_mms_video.so
91 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_uhd_video.so:system/vendor/lib/libchromatix_imx135_uhd_video.so
92 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_hfr_120.so:system/vendor/lib/libchromatix_imx135_hfr_120.so
93 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_video_hdr.so:system/vendor/lib/libchromatix_imx135_video_hdr.so
94 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_fuji_common.so:system/vendor/lib/libchromatix_imx135_fuji_common.so
95 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_fuji_snapshot.so:system/vendor/lib/libchromatix_imx135_fuji_snapshot.so
96 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_fuji_default_video.so:system/vendor/lib/libchromatix_imx135_fuji_default_video.so
97 | warning: blob file libchromatix_imx135_fuji_liveshot.so missing or broken
98 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_fuji_preview.so:system/vendor/lib/libchromatix_imx135_fuji_preview.so
99 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_fuji_video_qtr.so:system/vendor/lib/libchromatix_imx135_fuji_video_qtr.so
100 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_fuji_video_dualrec.so:system/vendor/lib/libchromatix_imx135_fuji_video_dualrec.so
101 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_fuji_hfr_60.so:system/vendor/lib/libchromatix_imx135_fuji_hfr_60.so
102 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_fuji_mms_video.so:system/vendor/lib/libchromatix_imx135_fuji_mms_video.so
103 | warning: blob file libchromatix_imx135_fuji_uhd_video.so missing or broken
104 | vendor/manufacturer/device/proprietary/vendor/lib/libchromatix_imx135_fuji_hfr_120.so:system/vendor/lib/libchromatix_imx135_fuji_hfr_120.so
105 | warning: blob file libchromatix_imx135_fuji_video_hdr.so missing or broken
106 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera_imx135_eeprom.so:system/vendor/lib/libmmcamera_imx135_eeprom.so
107 | vendor/manufacturer/device/proprietary/vendor/lib/libmmcamera_hdr_lib.so:system/vendor/lib/libmmcamera_hdr_lib.so
108 | vendor/manufacturer/device/proprietary/bin/mm-qcamera-daemon:system/bin/mm-qcamera-daemon
109 | Files to go: 1
110 | File name?
111 | > /home/android/dump/lib/hw/camera.msm8974.so
112 | vendor/manufacturer/device/proprietary/lib/libVDObjectTrackerAPI.so:system/lib/libVDObjectTrackerAPI.so
113 | vendor/manufacturer/device/proprietary/vendor/lib/libthermalclient.so:system/vendor/lib/libthermalclient.so
114 | vendor/manufacturer/device/proprietary/vendor/lib/libdiag.so:system/vendor/lib/libdiag.so
115 | vendor/manufacturer/device/proprietary/lib/hw/camera.msm8974.so:system/lib/hw/camera.msm8974.so
116 | Completed sucessfully.
117 |
118 |
--------------------------------------------------------------------------------
/blobutil/Makefile:
--------------------------------------------------------------------------------
1 |
2 | BUILD_WITH_READLINE := false
3 | VARIABLES_PROVIDED := false
4 |
5 | CC = gcc
6 | CFLAGS += -Wall -Wextra
7 |
8 | ifeq ($(BUILD_WITH_READLINE), true)
9 | CFLAGS += -DUSE_READLINE
10 | LDFLAGS += -lreadline
11 | endif
12 |
13 | ifeq ($(VARIABLES_PROVIDED), true)
14 | CFLAGS += -DVARIABLES_PROVIDED
15 | endif
16 |
17 | OBJECTS = android-blob-utility.o
18 | SOURCE = android-blob-utility.c
19 | MODULE = android-blob-utility
20 |
21 |
22 | android-blob-utility: $(OBJECTS)
23 | $(CC) $(CFLAGS) $(OBJECTS) -o $(MODULE) $(LDFLAGS)
24 |
25 | all: android-blob-utility
26 |
27 | clean:
28 | -rm -f $(OBJECTS) $(MODULE)
29 |
30 |
--------------------------------------------------------------------------------
/blobutil/README.md:
--------------------------------------------------------------------------------
1 | # Android Blob Utility
2 |
3 | by JackpotClavin
4 |
5 | The Android Blob Utility is a program designed to make developing AOSP-based
6 | ROMs easier to develop. What is does is it allows the developer to pick
7 | proprietary file, type the file's absolute path, and this program will spit
8 | back every library that should be needed in order to get that library or daemon
9 | to run on an AOSP ROM.
10 |
11 | How does it work? First the developer must dump their entire stock ROM's
12 | software to their computer, so that typing the command:
13 | "ls /home/android/dump/build.prop" will yield their device's build.prop.
14 | This is just meant to ensure that you have the correct path it is valid.
15 | Next, you are to compile this program with the 'make' command. Once you run it,
16 | the program will prompt you to enter whatever the sdk version of you /system
17 | dump happens to be (check your /system/build.prop), for instance if your
18 | /system dump is 4.3, type in 18 (use the following site for guidelines:
19 | developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels).
20 | Secondly, the program will ask you for the location of your /system dump so if
21 | the build.prop file is under /home/android/dump/build.prop, you can just type:
22 | /home/android/dump and press enter. For the third step of getting the blobs,
23 | this program will prompt you to enter however many blobs files you want this
24 | program to process. If you want to only process one blob, type 1 and hit enter.
25 | After you enter the amount of blobs you want this program to process, you will
26 | type the absolute path to the actual blob (see the example program usage
27 | below), and this program will print out all of the proprietary blobs that are
28 | mentioned in that particular blob that you entered, that aren't in the
29 | emulator's /system dump. That means that those files are either have to be
30 | built from source, or are proprietary and must be copied into the ROM's build.
31 | This program will also format the blobs such that it is ready to be placed into
32 | a vendor-blobs.mk file in your vendor folder of the ROM's source tree root.
33 |
34 | What makes this program great is that it doesn't just get the shared libraries
35 | necessary to appease the linker, but it takes another step; it also catches the
36 | blobs that may slip past the linker because they are called in the actual code
37 | of the blob. Simply copying the shared libraries just appeases the linker, but
38 | the blob still not run properly as the blob may want additional libraries.
39 |
40 | This program also searches recursively, so each and every blob that is found is
41 | also processed through the searching algorithm, to see which blobs *that*
42 | library also needs to run, so we cover all of the bases in order to get a
43 | proprietary library or daemon to run.
44 |
45 | The following example was used on my LG G2. Running this program with the two
46 | main proprietary files related to the camera (/system/bin/mm-qcamera-daemon and
47 | /system/lib/hw/camera.msm8974.so), this program nicely printed out *every*
48 | proprietary file needed to get the camera working, and formatted it so that one
49 | can easily find and replace "proprietary/vendor/lib/..." with the name and
50 | manufacturer of the device you wish to port AOSP-based ROMs to, instead of
51 | having to keep pushing files until the linker is satisfied, or having to find
52 | libraries that aren't shared libraries, but are called in the actual code of
53 | the proprietary file.
54 |
55 | Example program usage can be found in the Example_Usage.txt in this folder.
56 |
57 |
--------------------------------------------------------------------------------
/blobutil/android-blob-utility.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Android blob utility
3 | *
4 | * Copyright (C) 2014 JackpotClavin
5 | *
6 | * This program is free software; you can redistribute it and/or
7 | * modify it under the terms of the GNU General Public License
8 | * as published by the Free Software Foundation; either version 2
9 | * of the License, or (at your option) any later version.
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU General Public License
16 | * along with this program; if not, write to the Free Software
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18 | * MA 02110-1301, USA.
19 | */
20 |
21 | #ifndef _ANDROID_BLOB_UTILITY_H_
22 | #define _ANDROID_BLOB_UTILITY_H_
23 |
24 | #define _GNU_SOURCE
25 | #include
26 |
27 | /* Change value below to match your /system dump's SDK version. */
28 | /* See: https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels */
29 | //#define SYSTEM_DUMP_SDK_VERSION 19 /* Android KitKat*/
30 |
31 | #define SYSTEM_DUMP_SDK_VERSION 17 /* Android JB*/
32 |
33 | #define SYSTEM_DUMP_ROOT "/home/xdajog/android/fx3q_system_mounted"
34 | #define SYSTEM_VENDOR "lge"
35 | #define SYSTEM_DEVICE "fx3q"
36 |
37 | const char *blob_directories[] = {
38 | "/vendor/lib/egl/",
39 | "/vendor/lib/hw/",
40 | "/vendor/lib/",
41 | "/vendor/bin/",
42 | "/lib/egl/",
43 | "/lib/hw/",
44 | "/lib/",
45 | "/bin/",
46 | NULL
47 | };
48 |
49 | const char *lib_beginning = "lib";
50 | const char *egl_beginning = "egl";
51 |
52 | const char *lib_ending = ".so";
53 |
54 | #endif /* _ANDROID_BLOB_UTILITY_H_ */
55 |
--------------------------------------------------------------------------------
/blobutil/emulator_systems/sdk_14.txt:
--------------------------------------------------------------------------------
1 | /system/usr/share/zoneinfo/zoneinfo.dat
2 | /system/usr/share/zoneinfo/zoneinfo.idx
3 | /system/usr/share/zoneinfo/zoneinfo.version
4 | /system/usr/share/bmd/RFFspeed_501.bmd
5 | /system/usr/share/bmd/RFFstd_501.bmd
6 | /system/usr/keylayout/Vendor_046d_Product_c294.kl
7 | /system/usr/keylayout/Vendor_046d_Product_c532.kl
8 | /system/usr/keylayout/AVRCP.kl
9 | /system/usr/keylayout/Vendor_05ac_Product_0239.kl
10 | /system/usr/keylayout/Vendor_046d_Product_c216.kl
11 | /system/usr/keylayout/qwerty.kl
12 | /system/usr/keylayout/Vendor_045e_Product_028e.kl
13 | /system/usr/keylayout/Vendor_22b8_Product_093d.kl
14 | /system/usr/keylayout/Vendor_054c_Product_0268.kl
15 | /system/usr/keylayout/Vendor_046d_Product_c299.kl
16 | /system/usr/keylayout/Generic.kl
17 | /system/usr/idc/qwerty2.idc
18 | /system/usr/idc/qwerty.idc
19 | /system/usr/srec/config/en.us/baseline11k.par
20 | /system/usr/srec/config/en.us/grammars/VoiceDialer.g2g
21 | /system/usr/srec/config/en.us/grammars/boolean.g2g
22 | /system/usr/srec/config/en.us/grammars/phone_type_choice.g2g
23 | /system/usr/srec/config/en.us/baseline.par
24 | /system/usr/srec/config/en.us/g2p/en-US-ttp.data
25 | /system/usr/srec/config/en.us/models/generic.swiarb
26 | /system/usr/srec/config/en.us/models/generic8.lda
27 | /system/usr/srec/config/en.us/models/generic11_f.swimdl
28 | /system/usr/srec/config/en.us/models/generic8_m.swimdl
29 | /system/usr/srec/config/en.us/models/generic11.lda
30 | /system/usr/srec/config/en.us/models/generic11_m.swimdl
31 | /system/usr/srec/config/en.us/models/generic8_f.swimdl
32 | /system/usr/srec/config/en.us/dictionary/enroll.ok
33 | /system/usr/srec/config/en.us/dictionary/basic.ok
34 | /system/usr/srec/config/en.us/dictionary/cmu6plus.ok.zip
35 | /system/usr/srec/config/en.us/baseline8k.par
36 | /system/usr/icu/icudt46l.dat
37 | /system/usr/keychars/qwerty.kcm
38 | /system/usr/keychars/Virtual.kcm
39 | /system/usr/keychars/Generic.kcm
40 | /system/usr/keychars/qwerty2.kcm
41 | /system/media/audio/ui/VideoRecord.ogg
42 | /system/media/audio/ui/camera_click.ogg
43 | /system/etc/system_fonts.xml
44 | /system/etc/event-log-tags
45 | /system/etc/vold.fstab
46 | /system/etc/permissions/platform.xml
47 | /system/etc/permissions/android.hardware.camera.autofocus.xml
48 | /system/etc/permissions/com.android.location.provider.xml
49 | /system/etc/security/cacerts/d777342d.0
50 | /system/etc/security/cacerts/ddc328ff.0
51 | /system/etc/security/cacerts/ed524cf5.0
52 | /system/etc/security/cacerts/ee7cd6fb.0
53 | /system/etc/security/cacerts/3ad48a91.0
54 | /system/etc/security/cacerts/2fa87019.0
55 | /system/etc/security/cacerts/5e4e69e7.0
56 | /system/etc/security/cacerts/882de061.0
57 | /system/etc/security/cacerts/399e7759.0
58 | /system/etc/security/cacerts/1eb37bdf.0
59 | /system/etc/security/cacerts/e60bf0c0.0
60 | /system/etc/security/cacerts/81b9768f.0
61 | /system/etc/security/cacerts/c33a80d4.0
62 | /system/etc/security/cacerts/a0bc6fbb.0
63 | /system/etc/security/cacerts/dbc54cab.0
64 | /system/etc/security/cacerts/27af790d.0
65 | /system/etc/security/cacerts/1dcd6f4c.0
66 | /system/etc/security/cacerts/95aff9e3.0
67 | /system/etc/security/cacerts/f61bff45.0
68 | /system/etc/security/cacerts/2fb1850a.0
69 | /system/etc/security/cacerts/3c860d51.0
70 | /system/etc/security/cacerts/895cad1a.0
71 | /system/etc/security/cacerts/ed049835.0
72 | /system/etc/security/cacerts/69105f4f.0
73 | /system/etc/security/cacerts/c215bc69.0
74 | /system/etc/security/cacerts/7999be0d.0
75 | /system/etc/security/cacerts/cf701eeb.0
76 | /system/etc/security/cacerts/87753b0d.0
77 | /system/etc/security/cacerts/9339512a.0
78 | /system/etc/security/cacerts/2afc57aa.0
79 | /system/etc/security/cacerts/add67345.0
80 | /system/etc/security/cacerts/ff783690.0
81 | /system/etc/security/cacerts/7a481e66.0
82 | /system/etc/security/cacerts/7d453d8f.0
83 | /system/etc/security/cacerts/6adf0799.0
84 | /system/etc/security/cacerts/1dbdda5b.0
85 | /system/etc/security/cacerts/418595b9.0
86 | /system/etc/security/cacerts/ea169617.0
87 | /system/etc/security/cacerts/3a3b02ce.0
88 | /system/etc/security/cacerts/08aef7bb.0
89 | /system/etc/security/cacerts/219d9499.0
90 | /system/etc/security/cacerts/7651b327.0
91 | /system/etc/security/cacerts/4fbd6bfa.0
92 | /system/etc/security/cacerts/bcdd5959.0
93 | /system/etc/security/cacerts/cdaebb72.0
94 | /system/etc/security/cacerts/e48193cf.0
95 | /system/etc/security/cacerts/5a3f0ff8.0
96 | /system/etc/security/cacerts/c527e4ab.0
97 | /system/etc/security/cacerts/84cba82f.0
98 | /system/etc/security/cacerts/56b8a0b6.0
99 | /system/etc/security/cacerts/1df5ec47.0
100 | /system/etc/security/cacerts/ab5346f4.0
101 | /system/etc/security/cacerts/23f4c490.0
102 | /system/etc/security/cacerts/1e8e7201.0
103 | /system/etc/security/cacerts/60afe812.0
104 | /system/etc/security/cacerts/524d9b43.0
105 | /system/etc/security/cacerts/facacbc6.0
106 | /system/etc/security/cacerts/1dac3003.0
107 | /system/etc/security/cacerts/b0f3e76e.0
108 | /system/etc/security/cacerts/ccc52f49.0
109 | /system/etc/security/cacerts/fac084d7.0
110 | /system/etc/security/cacerts/c8763593.0
111 | /system/etc/security/cacerts/17b51fe6.0
112 | /system/etc/security/cacerts/c7e2a638.0
113 | /system/etc/security/cacerts/03e16f6c.0
114 | /system/etc/security/cacerts/6e8bf996.0
115 | /system/etc/security/cacerts/f4996e82.0
116 | /system/etc/security/cacerts/3c58f906.0
117 | /system/etc/security/cacerts/8f7b96c4.0
118 | /system/etc/security/cacerts/f58a60fe.0
119 | /system/etc/security/cacerts/d64f06f3.0
120 | /system/etc/security/cacerts/5cf9d536.0
121 | /system/etc/security/cacerts/12d55845.0
122 | /system/etc/security/cacerts/86212b19.0
123 | /system/etc/security/cacerts/7a819ef2.0
124 | /system/etc/security/cacerts/74c26bd0.0
125 | /system/etc/security/cacerts/33815e15.0
126 | /system/etc/security/cacerts/bf64f35b.0
127 | /system/etc/security/cacerts/b7db1890.0
128 | /system/etc/security/cacerts/9f533518.0
129 | /system/etc/security/cacerts/1155c94b.0
130 | /system/etc/security/cacerts/e7b8d656.0
131 | /system/etc/security/cacerts/6fcc125d.0
132 | /system/etc/security/cacerts/9685a493.0
133 | /system/etc/security/cacerts/3e7271e8.0
134 | /system/etc/security/cacerts/d537fba6.0
135 | /system/etc/security/cacerts/00673b5b.0
136 | /system/etc/security/cacerts/67495436.0
137 | /system/etc/security/cacerts/fde84897.0
138 | /system/etc/security/cacerts/e775ed2d.0
139 | /system/etc/security/cacerts/76579174.0
140 | /system/etc/security/cacerts/5046c355.0
141 | /system/etc/security/cacerts/eb375c3e.0
142 | /system/etc/security/cacerts/f80cc7f6.0
143 | /system/etc/security/cacerts/75680d2e.0
144 | /system/etc/security/cacerts/635ccfd5.0
145 | /system/etc/security/cacerts/48478734.0
146 | /system/etc/security/cacerts/111e6273.0
147 | /system/etc/security/cacerts/a7605362.0
148 | /system/etc/security/cacerts/1920cacb.0
149 | /system/etc/security/cacerts/7d3cd826.0
150 | /system/etc/security/cacerts/bc3f2570.0
151 | /system/etc/security/cacerts/bda4cc84.0
152 | /system/etc/security/cacerts/bdacca6f.0
153 | /system/etc/security/cacerts/9772ca32.0
154 | /system/etc/security/cacerts/a15b3b6b.0
155 | /system/etc/security/cacerts/57692373.0
156 | /system/etc/security/cacerts/343eb6cb.0
157 | /system/etc/security/cacerts/3d441de8.0
158 | /system/etc/security/cacerts/d8274e24.0
159 | /system/etc/security/cacerts/46b2fd3b.0
160 | /system/etc/security/cacerts/4d654d1d.0
161 | /system/etc/security/cacerts/5a5372fc.0
162 | /system/etc/security/cacerts/10531352.0
163 | /system/etc/security/cacerts/455f1b52.0
164 | /system/etc/security/cacerts/5021a0a2.0
165 | /system/etc/security/cacerts/11a09b38.0
166 | /system/etc/security/cacerts/594f1775.0
167 | /system/etc/security/cacerts/d16a5865.0
168 | /system/etc/security/cacerts/e8651083.0
169 | /system/etc/security/cacerts/4e18c148.0
170 | /system/etc/security/cacerts/a7d2cf64.0
171 | /system/etc/security/cacerts/72f369af.0
172 | /system/etc/security/cacerts/89c02a45.0
173 | /system/etc/security/cacerts/0d188d89.0
174 | /system/etc/security/cacerts/a3896b44.0
175 | /system/etc/security/cacerts/58a44af1.0
176 | /system/etc/security/cacerts/85cde254.0
177 | /system/etc/security/cacerts/9dbefe7b.0
178 | /system/etc/security/cacerts/9d6523ce.0
179 | /system/etc/security/cacerts/8470719d.0
180 | /system/etc/security/cacerts/2e8714cb.0
181 | /system/etc/security/cacerts/119afc2e.0
182 | /system/etc/security/cacerts/72fa7371.0
183 | /system/etc/security/otacerts.zip
184 | /system/etc/hosts
185 | /system/etc/ppp/ip-up-vpn
186 | /system/etc/dbus.conf
187 | /system/etc/fallback_fonts.xml
188 | /system/etc/apns-conf.xml
189 | /system/etc/NOTICE.html.gz
190 | /system/etc/init.goldfish.sh
191 | /system/etc/dhcpcd/dhcpcd-run-hooks
192 | /system/etc/dhcpcd/dhcpcd-hooks/95-configured
193 | /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf
194 | /system/framework/monkey.jar
195 | /system/framework/bu.jar
196 | /system/framework/apache-xml.odex
197 | /system/framework/bmgr.jar
198 | /system/framework/framework.odex
199 | /system/framework/core-junit.odex
200 | /system/framework/android.test.runner.jar
201 | /system/framework/framework-res.apk
202 | /system/framework/ime.jar
203 | /system/framework/am.jar
204 | /system/framework/filterfw.jar
205 | /system/framework/bouncycastle.odex
206 | /system/framework/pm.odex
207 | /system/framework/input.jar
208 | /system/framework/pm.jar
209 | /system/framework/javax.obex.jar
210 | /system/framework/javax.obex.odex
211 | /system/framework/core.jar
212 | /system/framework/input.odex
213 | /system/framework/android.test.runner.odex
214 | /system/framework/services.odex
215 | /system/framework/com.android.location.provider.jar
216 | /system/framework/svc.odex
217 | /system/framework/bouncycastle.jar
218 | /system/framework/services.jar
219 | /system/framework/core-junit.jar
220 | /system/framework/com.android.location.provider.odex
221 | /system/framework/framework.jar
222 | /system/framework/ime.odex
223 | /system/framework/apache-xml.jar
224 | /system/framework/filterfw.odex
225 | /system/framework/ext.jar
226 | /system/framework/android.policy.odex
227 | /system/framework/ext.odex
228 | /system/framework/android.policy.jar
229 | /system/framework/monkey.odex
230 | /system/framework/bmgr.odex
231 | /system/framework/core.odex
232 | /system/framework/bu.odex
233 | /system/framework/svc.jar
234 | /system/framework/am.odex
235 | /system/tts/lang_pico/en-GB_ta.bin
236 | /system/tts/lang_pico/en-GB_kh0_sg.bin
237 | /system/tts/lang_pico/fr-FR_nk0_sg.bin
238 | /system/tts/lang_pico/en-US_lh0_sg.bin
239 | /system/tts/lang_pico/de-DE_gl0_sg.bin
240 | /system/tts/lang_pico/de-DE_ta.bin
241 | /system/tts/lang_pico/it-IT_ta.bin
242 | /system/tts/lang_pico/es-ES_ta.bin
243 | /system/tts/lang_pico/fr-FR_ta.bin
244 | /system/tts/lang_pico/es-ES_zl0_sg.bin
245 | /system/tts/lang_pico/en-US_ta.bin
246 | /system/tts/lang_pico/it-IT_cm0_sg.bin
247 | /system/fonts/DroidSerif-BoldItalic.ttf
248 | /system/fonts/DroidSansGeorgian.ttf
249 | /system/fonts/DroidSansFallback.ttf
250 | /system/fonts/DroidSansMono.ttf
251 | /system/fonts/Roboto-Italic.ttf
252 | /system/fonts/Roboto-Bold.ttf
253 | /system/fonts/DroidSerif-Regular.ttf
254 | /system/fonts/AndroidClock.ttf
255 | /system/fonts/DroidSansHebrew-Bold.ttf
256 | /system/fonts/DroidSansThai.ttf
257 | /system/fonts/DroidSansHebrew-Regular.ttf
258 | /system/fonts/AndroidClock_Solid.ttf
259 | /system/fonts/DroidSansArmenian.ttf
260 | /system/fonts/Roboto-Regular.ttf
261 | /system/fonts/DroidSansEthiopic-Regular.ttf
262 | /system/fonts/DroidSerif-Italic.ttf
263 | /system/fonts/DroidNaskh-Regular.ttf
264 | /system/fonts/DroidSerif-Bold.ttf
265 | /system/fonts/Clockopia.ttf
266 | /system/fonts/AndroidClock_Highlight.ttf
267 | /system/fonts/Roboto-BoldItalic.ttf
268 | /system/lib/libnetutils.so
269 | /system/lib/libthread_db.so
270 | /system/lib/libjni_mosaic.so
271 | /system/lib/libstagefright.so
272 | /system/lib/libsensorservice.so
273 | /system/lib/libinput.so
274 | /system/lib/libssl.so
275 | /system/lib/libpowermanager.so
276 | /system/lib/egl/libGLES_android.so
277 | /system/lib/egl/egl.cfg
278 | /system/lib/egl/libGLESv2_emulation.so
279 | /system/lib/egl/libGLESv1_CM_emulation.so
280 | /system/lib/egl/libEGL_emulation.so
281 | /system/lib/libmedia.so
282 | /system/lib/libcrypto.so
283 | /system/lib/libstdc++.so
284 | /system/lib/libm.so
285 | /system/lib/libexif.so
286 | /system/lib/libeffects.so
287 | /system/lib/libsurfaceflinger.so
288 | /system/lib/libETC1.so
289 | /system/lib/libstagefright_omx.so
290 | /system/lib/libwilhelm.so
291 | /system/lib/libGLESv2_dbg.so
292 | /system/lib/libcutils.so
293 | /system/lib/libdrm1.so
294 | /system/lib/libvariablespeed.so
295 | /system/lib/libstagefright_amrnb_common.so
296 | /system/lib/libfilterpack_imageproc.so
297 | /system/lib/libc.so
298 | /system/lib/libsurfaceflinger_client.so
299 | /system/lib/libchromium_net.so
300 | /system/lib/libmtp.so
301 | /system/lib/libWnnEngDic.so
302 | /system/lib/libsqlite.so
303 | /system/lib/libEGL.so
304 | /system/lib/libnativehelper.so
305 | /system/lib/libGLESv2.so
306 | /system/lib/libGLESv2_enc.so
307 | /system/lib/libGLESv1_CM.so
308 | /system/lib/libsystem_server.so
309 | /system/lib/libui.so
310 | /system/lib/lib_renderControl_enc.so
311 | /system/lib/libvorbisidec.so
312 | /system/lib/libwnndict.so
313 | /system/lib/libctest.so
314 | /system/lib/libstagefright_enc_common.so
315 | /system/lib/libext4_utils.so
316 | /system/lib/libharfbuzz.so
317 | /system/lib/libstagefright_soft_g711dec.so
318 | /system/lib/libwebrtc_audio_preprocessing.so
319 | /system/lib/libstagefright_soft_mpeg4dec.so
320 | /system/lib/libutils.so
321 | /system/lib/hw/audio.primary.goldfish.so
322 | /system/lib/hw/lights.goldfish.so
323 | /system/lib/hw/audio_policy.default.so
324 | /system/lib/hw/gralloc.default.so
325 | /system/lib/hw/gralloc.goldfish.so
326 | /system/lib/hw/camera.goldfish.so
327 | /system/lib/hw/gps.goldfish.so
328 | /system/lib/hw/sensors.goldfish.so
329 | /system/lib/libreference-ril.so
330 | /system/lib/libpower.so
331 | /system/lib/libdrm1_jni.so
332 | /system/lib/libmedia_jni.so
333 | /system/lib/libstagefright_soft_vpxdec.so
334 | /system/lib/libcameraservice.so
335 | /system/lib/libril.so
336 | /system/lib/libdefcontainer_jni.so
337 | /system/lib/libOpenglSystemCommon.so
338 | /system/lib/libttspico.so
339 | /system/lib/libsoundpool.so
340 | /system/lib/libstagefright_soft_aacdec.so
341 | /system/lib/libsysutils.so
342 | /system/lib/libsrec_jni.so
343 | /system/lib/libicui18n.so
344 | /system/lib/libc_malloc_debug_qemu.so
345 | /system/lib/soundfx/libaudiopreprocessing.so
346 | /system/lib/soundfx/libbundlewrapper.so
347 | /system/lib/soundfx/libvisualizer.so
348 | /system/lib/soundfx/libreverbwrapper.so
349 | /system/lib/libhardware_legacy.so
350 | /system/lib/libcamera_client.so
351 | /system/lib/librs_jni.so
352 | /system/lib/libfilterfw.so
353 | /system/lib/libnfc_ndef.so
354 | /system/lib/libdvm.so
355 | /system/lib/libwpa_client.so
356 | /system/lib/libjpeg.so
357 | /system/lib/libaudioeffect_jni.so
358 | /system/lib/libhardware.so
359 | /system/lib/libc_malloc_debug_leak.so
360 | /system/lib/libspeexresampler.so
361 | /system/lib/libstagefright_avc_common.so
362 | /system/lib/libandroid_runtime.so
363 | /system/lib/libusbhost.so
364 | /system/lib/libWnnJpnDic.so
365 | /system/lib/libstagefright_yuv.so
366 | /system/lib/liblog.so
367 | /system/lib/libemoji.so
368 | /system/lib/libsqlite_jni.so
369 | /system/lib/libstagefright_foundation.so
370 | /system/lib/libstagefright_soft_vorbisdec.so
371 | /system/lib/libbinder.so
372 | /system/lib/libmediaplayerservice.so
373 | /system/lib/libgabi++.so
374 | /system/lib/libpagemap.so
375 | /system/lib/libsonivox.so
376 | /system/lib/libRS.so
377 | /system/lib/libskia.so
378 | /system/lib/libdrmframework.so
379 | /system/lib/libclcore.bc
380 | /system/lib/libjnigraphics.so
381 | /system/lib/libFFTEm.so
382 | /system/lib/libstagefright_soft_h264dec.so
383 | /system/lib/libandroid_servers.so
384 | /system/lib/libandroid.so
385 | /system/lib/libbcinfo.so
386 | /system/lib/libexpat.so
387 | /system/lib/libbcc.so
388 | /system/lib/libOpenSLES.so
389 | /system/lib/libdiskconfig.so
390 | /system/lib/libbcc.so.sha1
391 | /system/lib/libstagefright_soft_mp3dec.so
392 | /system/lib/libgui.so
393 | /system/lib/libpixelflinger.so
394 | /system/lib/libstagefright_soft_amrdec.so
395 | /system/lib/librtp_jni.so
396 | /system/lib/libaudioflinger.so
397 | /system/lib/libdl.so
398 | /system/lib/libSR_AudioIn.so
399 | /system/lib/libjni_latinime.so
400 | /system/lib/libstlport.so
401 | /system/lib/invoke_mock_media_player.so
402 | /system/lib/libttscompat.so
403 | /system/lib/libwebcore.so
404 | /system/lib/libOpenMAXAL.so
405 | /system/lib/libicuuc.so
406 | /system/lib/libz.so
407 | /system/lib/libGLESv1_enc.so
408 | /system/app/Music.odex
409 | /system/app/Development.odex
410 | /system/app/PinyinIME.odex
411 | /system/app/ConnectivityTest.apk
412 | /system/app/Protips.apk
413 | /system/app/NetSpeed.apk
414 | /system/app/Exchange.apk
415 | /system/app/OpenWnn.apk
416 | /system/app/Camera.odex
417 | /system/app/UserDictionaryProvider.apk
418 | /system/app/CertInstaller.apk
419 | /system/app/ApplicationsProvider.odex
420 | /system/app/LatinIME.odex
421 | /system/app/SpeechRecorder.odex
422 | /system/app/SettingsProvider.apk
423 | /system/app/Launcher2.apk
424 | /system/app/TelephonyProvider.odex
425 | /system/app/Gallery.odex
426 | /system/app/Development.apk
427 | /system/app/QuickSearchBox.odex
428 | /system/app/KeyChain.odex
429 | /system/app/MediaProvider.apk
430 | /system/app/Settings.apk
431 | /system/app/QuickSearchBox.apk
432 | /system/app/LiveWallpapersPicker.apk
433 | /system/app/DrmProvider.odex
434 | /system/app/GpsLocationTest.apk
435 | /system/app/ContactsProvider.apk
436 | /system/app/Settings.odex
437 | /system/app/SystemUI.apk
438 | /system/app/DownloadProvider.apk
439 | /system/app/Camera.apk
440 | /system/app/Protips.odex
441 | /system/app/CustomLocale.apk
442 | /system/app/CalendarProvider.odex
443 | /system/app/OpenWnn.odex
444 | /system/app/TelephonyProvider.apk
445 | /system/app/DrmProvider.apk
446 | /system/app/StingrayProgramMenuSystem.apk
447 | /system/app/CustomLocale.odex
448 | /system/app/Contacts.odex
449 | /system/app/Launcher2.odex
450 | /system/app/PicoTts.odex
451 | /system/app/ContactsProvider.odex
452 | /system/app/DownloadProviderUi.odex
453 | /system/app/NetSpeed.odex
454 | /system/app/GpsLocationTest.odex
455 | /system/app/Mms.apk
456 | /system/app/LiveWallpapersPicker.odex
457 | /system/app/Phone.odex
458 | /system/app/Music.apk
459 | /system/app/DefaultContainerService.apk
460 | /system/app/KeyChain.apk
461 | /system/app/PackageInstaller.apk
462 | /system/app/SdkSetup.odex
463 | /system/app/Calculator.apk
464 | /system/app/SoundRecorder.odex
465 | /system/app/SettingsProvider.odex
466 | /system/app/Browser.apk
467 | /system/app/SpeechRecorder.apk
468 | /system/app/SharedStorageBackup.apk
469 | /system/app/SoundRecorder.apk
470 | /system/app/Phone.apk
471 | /system/app/Gallery.apk
472 | /system/app/Exchange.odex
473 | /system/app/BackupRestoreConfirmation.apk
474 | /system/app/SystemUI.odex
475 | /system/app/ApplicationsProvider.apk
476 | /system/app/CalendarProvider.apk
477 | /system/app/HTMLViewer.odex
478 | /system/app/BackupRestoreConfirmation.odex
479 | /system/app/Calendar.odex
480 | /system/app/PinyinIME.apk
481 | /system/app/DownloadProviderUi.apk
482 | /system/app/DownloadProvider.odex
483 | /system/app/Fallback.apk
484 | /system/app/LatinIME.apk
485 | /system/app/Email.odex
486 | /system/app/ConnectivityTest.odex
487 | /system/app/StingrayProgramMenu.apk
488 | /system/app/HTMLViewer.apk
489 | /system/app/PicoTts.apk
490 | /system/app/Email.apk
491 | /system/app/DeskClock.odex
492 | /system/app/CertInstaller.odex
493 | /system/app/SharedStorageBackup.odex
494 | /system/app/PackageInstaller.odex
495 | /system/app/Browser.odex
496 | /system/app/VpnDialogs.odex
497 | /system/app/DeskClock.apk
498 | /system/app/Calculator.odex
499 | /system/app/SdkSetup.apk
500 | /system/app/Mms.odex
501 | /system/app/MediaProvider.odex
502 | /system/app/Contacts.apk
503 | /system/app/UserDictionaryProvider.odex
504 | /system/app/Fallback.odex
505 | /system/app/Calendar.apk
506 | /system/app/DefaultContainerService.odex
507 | /system/app/VpnDialogs.apk
508 | /system/bin/dumpsys
509 | /system/bin/InputReader_test
510 | /system/bin/iptables
511 | /system/bin/dumpstate
512 | /system/bin/am
513 | /system/bin/bmgr
514 | /system/bin/servicemanager
515 | /system/bin/dalvikvm
516 | /system/bin/monkey
517 | /system/bin/BlobCache_test
518 | /system/bin/mtpd
519 | /system/bin/rild
520 | /system/bin/pppd
521 | /system/bin/Looper_test
522 | /system/bin/ZipFileRO_test
523 | /system/bin/recordvideo
524 | /system/bin/system_server
525 | /system/bin/keystore_cli
526 | /system/bin/omx_tests
527 | /system/bin/installd
528 | /system/bin/audioloop
529 | /system/bin/svc
530 | /system/bin/showlease
531 | /system/bin/ime
532 | /system/bin/radiooptions
533 | /system/bin/logwrapper
534 | /system/bin/adb
535 | /system/bin/simg2img
536 | /system/bin/qemu-props
537 | /system/bin/dexopt
538 | /system/bin/ObbFile_test
539 | /system/bin/racoon
540 | /system/bin/InputDispatcher_test
541 | /system/bin/surfaceflinger
542 | /system/bin/sf2
543 | /system/bin/ping
544 | /system/bin/schedtest
545 | /system/bin/stream
546 | /system/bin/debuggerd
547 | /system/bin/String8_test
548 | /system/bin/netd
549 | /system/bin/record
550 | /system/bin/logcat
551 | /system/bin/keystore
552 | /system/bin/Unicode_test
553 | /system/bin/service
554 | /system/bin/linker
555 | /system/bin/sdcard
556 | /system/bin/mediaserver
557 | /system/bin/toolbox
558 | /system/bin/gdbserver
559 | /system/bin/gdbjithelper
560 | /system/bin/ping6
561 | /system/bin/check_prereq
562 | /system/bin/screenshot
563 | /system/bin/decoder
564 | /system/bin/bootanimation
565 | /system/bin/bu
566 | /system/bin/sensorservice
567 | /system/bin/vdc
568 | /system/bin/run-as
569 | /system/bin/ndc
570 | /system/bin/netcfg
571 | /system/bin/InputEvent_test
572 | /system/bin/screencap
573 | /system/bin/InputPublisherAndConsumer_test
574 | /system/bin/ip6tables
575 | /system/bin/dhcpcd
576 | /system/bin/updater
577 | /system/bin/recovery
578 | /system/bin/bugreport
579 | /system/bin/skia_test
580 | /system/bin/input
581 | /system/bin/gzip
582 | /system/bin/app_process
583 | /system/bin/InputChannel_test
584 | /system/bin/vold
585 | /system/bin/testid3
586 | /system/bin/stagefright
587 | /system/bin/qemud
588 | /system/bin/applypatch_static
589 | /system/bin/applypatch
590 | /system/bin/flash_image
591 | /system/bin/fsck_msdos
592 | /system/bin/ash
593 | /system/bin/pm
594 | /system/build.prop
595 | /system/xbin/procrank
596 | /system/xbin/showslab
597 | /system/xbin/netserver
598 | /system/xbin/showmap
599 | /system/xbin/strace
600 | /system/xbin/sane_schedstat
601 | /system/xbin/librank
602 | /system/xbin/btool
603 | /system/xbin/tcpdump
604 | /system/xbin/su
605 | /system/xbin/check-lost+found
606 | /system/xbin/ssh
607 | /system/xbin/daemonize
608 | /system/xbin/cpueater
609 | /system/xbin/rawbu
610 | /system/xbin/directiotest
611 | /system/xbin/scp
612 | /system/xbin/latencytop
613 | /system/xbin/netperf
614 | /system/xbin/nc
615 | /system/xbin/sqlite3
616 | /system/xbin/micro_bench
617 | /system/xbin/dexdump
618 | /system/xbin/add-property-tag
619 | /system/xbin/procmem
620 | /system/xbin/timeinfo
621 |
--------------------------------------------------------------------------------
/blobutil/emulator_systems/sdk_15.txt:
--------------------------------------------------------------------------------
1 | /system/usr/share/zoneinfo/zoneinfo.dat
2 | /system/usr/share/zoneinfo/zoneinfo.idx
3 | /system/usr/share/zoneinfo/zoneinfo.version
4 | /system/usr/share/bmd/RFFspeed_501.bmd
5 | /system/usr/share/bmd/RFFstd_501.bmd
6 | /system/usr/keylayout/Vendor_046d_Product_c294.kl
7 | /system/usr/keylayout/Vendor_046d_Product_c532.kl
8 | /system/usr/keylayout/AVRCP.kl
9 | /system/usr/keylayout/Vendor_05ac_Product_0239.kl
10 | /system/usr/keylayout/Vendor_046d_Product_c216.kl
11 | /system/usr/keylayout/qwerty.kl
12 | /system/usr/keylayout/Vendor_045e_Product_028e.kl
13 | /system/usr/keylayout/Vendor_22b8_Product_093d.kl
14 | /system/usr/keylayout/Vendor_054c_Product_0268.kl
15 | /system/usr/keylayout/Vendor_046d_Product_c299.kl
16 | /system/usr/keylayout/Generic.kl
17 | /system/usr/idc/qwerty2.idc
18 | /system/usr/idc/qwerty.idc
19 | /system/usr/srec/config/en.us/baseline11k.par
20 | /system/usr/srec/config/en.us/grammars/VoiceDialer.g2g
21 | /system/usr/srec/config/en.us/grammars/boolean.g2g
22 | /system/usr/srec/config/en.us/grammars/phone_type_choice.g2g
23 | /system/usr/srec/config/en.us/baseline.par
24 | /system/usr/srec/config/en.us/g2p/en-US-ttp.data
25 | /system/usr/srec/config/en.us/models/generic.swiarb
26 | /system/usr/srec/config/en.us/models/generic8.lda
27 | /system/usr/srec/config/en.us/models/generic11_f.swimdl
28 | /system/usr/srec/config/en.us/models/generic8_m.swimdl
29 | /system/usr/srec/config/en.us/models/generic11.lda
30 | /system/usr/srec/config/en.us/models/generic11_m.swimdl
31 | /system/usr/srec/config/en.us/models/generic8_f.swimdl
32 | /system/usr/srec/config/en.us/dictionary/enroll.ok
33 | /system/usr/srec/config/en.us/dictionary/basic.ok
34 | /system/usr/srec/config/en.us/dictionary/cmu6plus.ok.zip
35 | /system/usr/srec/config/en.us/baseline8k.par
36 | /system/usr/icu/icudt46l.dat
37 | /system/usr/keychars/qwerty.kcm
38 | /system/usr/keychars/Virtual.kcm
39 | /system/usr/keychars/Generic.kcm
40 | /system/usr/keychars/qwerty2.kcm
41 | /system/media/audio/ui/VideoRecord.ogg
42 | /system/media/audio/ui/camera_click.ogg
43 | /system/etc/system_fonts.xml
44 | /system/etc/event-log-tags
45 | /system/etc/vold.fstab
46 | /system/etc/permissions/handheld_core_hardware.xml
47 | /system/etc/permissions/platform.xml
48 | /system/etc/permissions/android.hardware.camera.autofocus.xml
49 | /system/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml
50 | /system/etc/permissions/com.android.location.provider.xml
51 | /system/etc/security/cacerts/d777342d.0
52 | /system/etc/security/cacerts/ddc328ff.0
53 | /system/etc/security/cacerts/ed524cf5.0
54 | /system/etc/security/cacerts/ee7cd6fb.0
55 | /system/etc/security/cacerts/3ad48a91.0
56 | /system/etc/security/cacerts/2fa87019.0
57 | /system/etc/security/cacerts/5e4e69e7.0
58 | /system/etc/security/cacerts/882de061.0
59 | /system/etc/security/cacerts/399e7759.0
60 | /system/etc/security/cacerts/1eb37bdf.0
61 | /system/etc/security/cacerts/e60bf0c0.0
62 | /system/etc/security/cacerts/81b9768f.0
63 | /system/etc/security/cacerts/c33a80d4.0
64 | /system/etc/security/cacerts/a0bc6fbb.0
65 | /system/etc/security/cacerts/dbc54cab.0
66 | /system/etc/security/cacerts/27af790d.0
67 | /system/etc/security/cacerts/1dcd6f4c.0
68 | /system/etc/security/cacerts/95aff9e3.0
69 | /system/etc/security/cacerts/f61bff45.0
70 | /system/etc/security/cacerts/2fb1850a.0
71 | /system/etc/security/cacerts/3c860d51.0
72 | /system/etc/security/cacerts/895cad1a.0
73 | /system/etc/security/cacerts/ed049835.0
74 | /system/etc/security/cacerts/69105f4f.0
75 | /system/etc/security/cacerts/c215bc69.0
76 | /system/etc/security/cacerts/7999be0d.0
77 | /system/etc/security/cacerts/cf701eeb.0
78 | /system/etc/security/cacerts/87753b0d.0
79 | /system/etc/security/cacerts/9339512a.0
80 | /system/etc/security/cacerts/2afc57aa.0
81 | /system/etc/security/cacerts/add67345.0
82 | /system/etc/security/cacerts/ff783690.0
83 | /system/etc/security/cacerts/7a481e66.0
84 | /system/etc/security/cacerts/7d453d8f.0
85 | /system/etc/security/cacerts/6adf0799.0
86 | /system/etc/security/cacerts/1dbdda5b.0
87 | /system/etc/security/cacerts/418595b9.0
88 | /system/etc/security/cacerts/ea169617.0
89 | /system/etc/security/cacerts/3a3b02ce.0
90 | /system/etc/security/cacerts/08aef7bb.0
91 | /system/etc/security/cacerts/219d9499.0
92 | /system/etc/security/cacerts/7651b327.0
93 | /system/etc/security/cacerts/4fbd6bfa.0
94 | /system/etc/security/cacerts/bcdd5959.0
95 | /system/etc/security/cacerts/cdaebb72.0
96 | /system/etc/security/cacerts/e48193cf.0
97 | /system/etc/security/cacerts/5a3f0ff8.0
98 | /system/etc/security/cacerts/c527e4ab.0
99 | /system/etc/security/cacerts/84cba82f.0
100 | /system/etc/security/cacerts/56b8a0b6.0
101 | /system/etc/security/cacerts/1df5ec47.0
102 | /system/etc/security/cacerts/ab5346f4.0
103 | /system/etc/security/cacerts/23f4c490.0
104 | /system/etc/security/cacerts/1e8e7201.0
105 | /system/etc/security/cacerts/60afe812.0
106 | /system/etc/security/cacerts/524d9b43.0
107 | /system/etc/security/cacerts/facacbc6.0
108 | /system/etc/security/cacerts/1dac3003.0
109 | /system/etc/security/cacerts/b0f3e76e.0
110 | /system/etc/security/cacerts/ccc52f49.0
111 | /system/etc/security/cacerts/fac084d7.0
112 | /system/etc/security/cacerts/c8763593.0
113 | /system/etc/security/cacerts/17b51fe6.0
114 | /system/etc/security/cacerts/c7e2a638.0
115 | /system/etc/security/cacerts/03e16f6c.0
116 | /system/etc/security/cacerts/6e8bf996.0
117 | /system/etc/security/cacerts/f4996e82.0
118 | /system/etc/security/cacerts/3c58f906.0
119 | /system/etc/security/cacerts/8f7b96c4.0
120 | /system/etc/security/cacerts/f58a60fe.0
121 | /system/etc/security/cacerts/d64f06f3.0
122 | /system/etc/security/cacerts/5cf9d536.0
123 | /system/etc/security/cacerts/12d55845.0
124 | /system/etc/security/cacerts/86212b19.0
125 | /system/etc/security/cacerts/7a819ef2.0
126 | /system/etc/security/cacerts/74c26bd0.0
127 | /system/etc/security/cacerts/33815e15.0
128 | /system/etc/security/cacerts/bf64f35b.0
129 | /system/etc/security/cacerts/b7db1890.0
130 | /system/etc/security/cacerts/9f533518.0
131 | /system/etc/security/cacerts/1155c94b.0
132 | /system/etc/security/cacerts/e7b8d656.0
133 | /system/etc/security/cacerts/6fcc125d.0
134 | /system/etc/security/cacerts/9685a493.0
135 | /system/etc/security/cacerts/3e7271e8.0
136 | /system/etc/security/cacerts/d537fba6.0
137 | /system/etc/security/cacerts/00673b5b.0
138 | /system/etc/security/cacerts/67495436.0
139 | /system/etc/security/cacerts/fde84897.0
140 | /system/etc/security/cacerts/e775ed2d.0
141 | /system/etc/security/cacerts/76579174.0
142 | /system/etc/security/cacerts/5046c355.0
143 | /system/etc/security/cacerts/eb375c3e.0
144 | /system/etc/security/cacerts/f80cc7f6.0
145 | /system/etc/security/cacerts/75680d2e.0
146 | /system/etc/security/cacerts/635ccfd5.0
147 | /system/etc/security/cacerts/48478734.0
148 | /system/etc/security/cacerts/111e6273.0
149 | /system/etc/security/cacerts/a7605362.0
150 | /system/etc/security/cacerts/1920cacb.0
151 | /system/etc/security/cacerts/7d3cd826.0
152 | /system/etc/security/cacerts/bc3f2570.0
153 | /system/etc/security/cacerts/bda4cc84.0
154 | /system/etc/security/cacerts/bdacca6f.0
155 | /system/etc/security/cacerts/9772ca32.0
156 | /system/etc/security/cacerts/a15b3b6b.0
157 | /system/etc/security/cacerts/57692373.0
158 | /system/etc/security/cacerts/343eb6cb.0
159 | /system/etc/security/cacerts/3d441de8.0
160 | /system/etc/security/cacerts/d8274e24.0
161 | /system/etc/security/cacerts/46b2fd3b.0
162 | /system/etc/security/cacerts/4d654d1d.0
163 | /system/etc/security/cacerts/5a5372fc.0
164 | /system/etc/security/cacerts/10531352.0
165 | /system/etc/security/cacerts/455f1b52.0
166 | /system/etc/security/cacerts/5021a0a2.0
167 | /system/etc/security/cacerts/11a09b38.0
168 | /system/etc/security/cacerts/594f1775.0
169 | /system/etc/security/cacerts/d16a5865.0
170 | /system/etc/security/cacerts/e8651083.0
171 | /system/etc/security/cacerts/4e18c148.0
172 | /system/etc/security/cacerts/a7d2cf64.0
173 | /system/etc/security/cacerts/72f369af.0
174 | /system/etc/security/cacerts/89c02a45.0
175 | /system/etc/security/cacerts/0d188d89.0
176 | /system/etc/security/cacerts/a3896b44.0
177 | /system/etc/security/cacerts/58a44af1.0
178 | /system/etc/security/cacerts/85cde254.0
179 | /system/etc/security/cacerts/9dbefe7b.0
180 | /system/etc/security/cacerts/9d6523ce.0
181 | /system/etc/security/cacerts/8470719d.0
182 | /system/etc/security/cacerts/2e8714cb.0
183 | /system/etc/security/cacerts/119afc2e.0
184 | /system/etc/security/cacerts/72fa7371.0
185 | /system/etc/security/otacerts.zip
186 | /system/etc/hosts
187 | /system/etc/ppp/ip-up-vpn
188 | /system/etc/dbus.conf
189 | /system/etc/fallback_fonts.xml
190 | /system/etc/apns-conf.xml
191 | /system/etc/NOTICE.html.gz
192 | /system/etc/init.goldfish.sh
193 | /system/etc/dhcpcd/dhcpcd-run-hooks
194 | /system/etc/dhcpcd/dhcpcd-hooks/95-configured
195 | /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf
196 | /system/framework/monkey.jar
197 | /system/framework/bu.jar
198 | /system/framework/apache-xml.odex
199 | /system/framework/bmgr.jar
200 | /system/framework/framework.odex
201 | /system/framework/core-junit.odex
202 | /system/framework/android.test.runner.jar
203 | /system/framework/framework-res.apk
204 | /system/framework/ime.jar
205 | /system/framework/am.jar
206 | /system/framework/filterfw.jar
207 | /system/framework/bouncycastle.odex
208 | /system/framework/pm.odex
209 | /system/framework/input.jar
210 | /system/framework/pm.jar
211 | /system/framework/javax.obex.jar
212 | /system/framework/javax.obex.odex
213 | /system/framework/core.jar
214 | /system/framework/input.odex
215 | /system/framework/android.test.runner.odex
216 | /system/framework/services.odex
217 | /system/framework/com.android.location.provider.jar
218 | /system/framework/svc.odex
219 | /system/framework/bouncycastle.jar
220 | /system/framework/services.jar
221 | /system/framework/core-junit.jar
222 | /system/framework/com.android.location.provider.odex
223 | /system/framework/framework.jar
224 | /system/framework/ime.odex
225 | /system/framework/apache-xml.jar
226 | /system/framework/filterfw.odex
227 | /system/framework/ext.jar
228 | /system/framework/android.policy.odex
229 | /system/framework/ext.odex
230 | /system/framework/android.policy.jar
231 | /system/framework/monkey.odex
232 | /system/framework/bmgr.odex
233 | /system/framework/core.odex
234 | /system/framework/bu.odex
235 | /system/framework/svc.jar
236 | /system/framework/am.odex
237 | /system/tts/lang_pico/en-GB_ta.bin
238 | /system/tts/lang_pico/en-GB_kh0_sg.bin
239 | /system/tts/lang_pico/fr-FR_nk0_sg.bin
240 | /system/tts/lang_pico/en-US_lh0_sg.bin
241 | /system/tts/lang_pico/de-DE_gl0_sg.bin
242 | /system/tts/lang_pico/de-DE_ta.bin
243 | /system/tts/lang_pico/it-IT_ta.bin
244 | /system/tts/lang_pico/es-ES_ta.bin
245 | /system/tts/lang_pico/fr-FR_ta.bin
246 | /system/tts/lang_pico/es-ES_zl0_sg.bin
247 | /system/tts/lang_pico/en-US_ta.bin
248 | /system/tts/lang_pico/it-IT_cm0_sg.bin
249 | /system/fonts/DroidSerif-BoldItalic.ttf
250 | /system/fonts/DroidSansGeorgian.ttf
251 | /system/fonts/DroidSansFallback.ttf
252 | /system/fonts/DroidSansMono.ttf
253 | /system/fonts/Roboto-Italic.ttf
254 | /system/fonts/Roboto-Bold.ttf
255 | /system/fonts/DroidSerif-Regular.ttf
256 | /system/fonts/AndroidClock.ttf
257 | /system/fonts/DroidSansHebrew-Bold.ttf
258 | /system/fonts/DroidSansThai.ttf
259 | /system/fonts/DroidSansHebrew-Regular.ttf
260 | /system/fonts/AndroidClock_Solid.ttf
261 | /system/fonts/DroidSansArmenian.ttf
262 | /system/fonts/Roboto-Regular.ttf
263 | /system/fonts/DroidSansEthiopic-Regular.ttf
264 | /system/fonts/DroidSerif-Italic.ttf
265 | /system/fonts/DroidNaskh-Regular.ttf
266 | /system/fonts/DroidSerif-Bold.ttf
267 | /system/fonts/Clockopia.ttf
268 | /system/fonts/AndroidClock_Highlight.ttf
269 | /system/fonts/Roboto-BoldItalic.ttf
270 | /system/lib/libnetutils.so
271 | /system/lib/libthread_db.so
272 | /system/lib/libjni_mosaic.so
273 | /system/lib/libstagefright.so
274 | /system/lib/libsensorservice.so
275 | /system/lib/libinput.so
276 | /system/lib/libssl.so
277 | /system/lib/libpowermanager.so
278 | /system/lib/egl/libGLES_android.so
279 | /system/lib/egl/egl.cfg
280 | /system/lib/egl/libGLESv2_emulation.so
281 | /system/lib/egl/libGLESv1_CM_emulation.so
282 | /system/lib/egl/libEGL_emulation.so
283 | /system/lib/libmedia.so
284 | /system/lib/libcrypto.so
285 | /system/lib/libstdc++.so
286 | /system/lib/libm.so
287 | /system/lib/libexif.so
288 | /system/lib/libeffects.so
289 | /system/lib/libsurfaceflinger.so
290 | /system/lib/libETC1.so
291 | /system/lib/libstagefright_omx.so
292 | /system/lib/libwilhelm.so
293 | /system/lib/libGLESv2_dbg.so
294 | /system/lib/libcutils.so
295 | /system/lib/libdrm1.so
296 | /system/lib/libvariablespeed.so
297 | /system/lib/libstagefright_amrnb_common.so
298 | /system/lib/libfilterpack_imageproc.so
299 | /system/lib/libc.so
300 | /system/lib/libsurfaceflinger_client.so
301 | /system/lib/libchromium_net.so
302 | /system/lib/libmtp.so
303 | /system/lib/libWnnEngDic.so
304 | /system/lib/libsqlite.so
305 | /system/lib/libEGL.so
306 | /system/lib/libnativehelper.so
307 | /system/lib/libGLESv2.so
308 | /system/lib/libGLESv2_enc.so
309 | /system/lib/libGLESv1_CM.so
310 | /system/lib/libsystem_server.so
311 | /system/lib/libui.so
312 | /system/lib/lib_renderControl_enc.so
313 | /system/lib/libvorbisidec.so
314 | /system/lib/libwnndict.so
315 | /system/lib/libctest.so
316 | /system/lib/libstagefright_enc_common.so
317 | /system/lib/libext4_utils.so
318 | /system/lib/libharfbuzz.so
319 | /system/lib/libstagefright_soft_g711dec.so
320 | /system/lib/libwebrtc_audio_preprocessing.so
321 | /system/lib/libstagefright_soft_mpeg4dec.so
322 | /system/lib/libutils.so
323 | /system/lib/hw/audio.primary.goldfish.so
324 | /system/lib/hw/lights.goldfish.so
325 | /system/lib/hw/audio_policy.default.so
326 | /system/lib/hw/gralloc.default.so
327 | /system/lib/hw/gralloc.goldfish.so
328 | /system/lib/hw/camera.goldfish.so
329 | /system/lib/hw/gps.goldfish.so
330 | /system/lib/hw/sensors.goldfish.so
331 | /system/lib/libreference-ril.so
332 | /system/lib/libpower.so
333 | /system/lib/libdrm1_jni.so
334 | /system/lib/libmedia_jni.so
335 | /system/lib/libstagefright_soft_vpxdec.so
336 | /system/lib/libcameraservice.so
337 | /system/lib/libril.so
338 | /system/lib/libdefcontainer_jni.so
339 | /system/lib/libOpenglSystemCommon.so
340 | /system/lib/libttspico.so
341 | /system/lib/libsoundpool.so
342 | /system/lib/libstagefright_soft_aacdec.so
343 | /system/lib/libsysutils.so
344 | /system/lib/libsrec_jni.so
345 | /system/lib/libicui18n.so
346 | /system/lib/libc_malloc_debug_qemu.so
347 | /system/lib/soundfx/libaudiopreprocessing.so
348 | /system/lib/soundfx/libbundlewrapper.so
349 | /system/lib/soundfx/libvisualizer.so
350 | /system/lib/soundfx/libreverbwrapper.so
351 | /system/lib/libhardware_legacy.so
352 | /system/lib/libcamera_client.so
353 | /system/lib/librs_jni.so
354 | /system/lib/libfilterfw.so
355 | /system/lib/libnfc_ndef.so
356 | /system/lib/libdvm.so
357 | /system/lib/libwpa_client.so
358 | /system/lib/libjpeg.so
359 | /system/lib/libaudioeffect_jni.so
360 | /system/lib/libhardware.so
361 | /system/lib/libc_malloc_debug_leak.so
362 | /system/lib/libspeexresampler.so
363 | /system/lib/libstagefright_avc_common.so
364 | /system/lib/libandroid_runtime.so
365 | /system/lib/libusbhost.so
366 | /system/lib/libWnnJpnDic.so
367 | /system/lib/libstagefright_yuv.so
368 | /system/lib/liblog.so
369 | /system/lib/libemoji.so
370 | /system/lib/libsqlite_jni.so
371 | /system/lib/libstagefright_foundation.so
372 | /system/lib/libstagefright_soft_vorbisdec.so
373 | /system/lib/libbinder.so
374 | /system/lib/libmediaplayerservice.so
375 | /system/lib/libgabi++.so
376 | /system/lib/libpagemap.so
377 | /system/lib/libsonivox.so
378 | /system/lib/libRS.so
379 | /system/lib/libskia.so
380 | /system/lib/libdrmframework.so
381 | /system/lib/libclcore.bc
382 | /system/lib/libjnigraphics.so
383 | /system/lib/libhwui.so
384 | /system/lib/libFFTEm.so
385 | /system/lib/libstagefright_soft_h264dec.so
386 | /system/lib/libandroid_servers.so
387 | /system/lib/libandroid.so
388 | /system/lib/libbcinfo.so
389 | /system/lib/libexpat.so
390 | /system/lib/libbcc.so
391 | /system/lib/libOpenSLES.so
392 | /system/lib/libdiskconfig.so
393 | /system/lib/libbcc.so.sha1
394 | /system/lib/libstagefright_soft_mp3dec.so
395 | /system/lib/libgui.so
396 | /system/lib/libpixelflinger.so
397 | /system/lib/libstagefright_soft_amrdec.so
398 | /system/lib/librtp_jni.so
399 | /system/lib/libaudioflinger.so
400 | /system/lib/libdl.so
401 | /system/lib/libSR_AudioIn.so
402 | /system/lib/libjni_latinime.so
403 | /system/lib/libstlport.so
404 | /system/lib/invoke_mock_media_player.so
405 | /system/lib/libttscompat.so
406 | /system/lib/libwebcore.so
407 | /system/lib/libOpenMAXAL.so
408 | /system/lib/libicuuc.so
409 | /system/lib/libz.so
410 | /system/lib/libGLESv1_enc.so
411 | /system/app/Music.odex
412 | /system/app/Development.odex
413 | /system/app/PinyinIME.odex
414 | /system/app/ConnectivityTest.apk
415 | /system/app/Protips.apk
416 | /system/app/NetSpeed.apk
417 | /system/app/Exchange.apk
418 | /system/app/OpenWnn.apk
419 | /system/app/Camera.odex
420 | /system/app/UserDictionaryProvider.apk
421 | /system/app/CertInstaller.apk
422 | /system/app/ApplicationsProvider.odex
423 | /system/app/LatinIME.odex
424 | /system/app/SpeechRecorder.odex
425 | /system/app/SettingsProvider.apk
426 | /system/app/Launcher2.apk
427 | /system/app/TelephonyProvider.odex
428 | /system/app/Gallery.odex
429 | /system/app/Development.apk
430 | /system/app/QuickSearchBox.odex
431 | /system/app/KeyChain.odex
432 | /system/app/MediaProvider.apk
433 | /system/app/Settings.apk
434 | /system/app/QuickSearchBox.apk
435 | /system/app/LiveWallpapersPicker.apk
436 | /system/app/DrmProvider.odex
437 | /system/app/GpsLocationTest.apk
438 | /system/app/ContactsProvider.apk
439 | /system/app/Settings.odex
440 | /system/app/SystemUI.apk
441 | /system/app/DownloadProvider.apk
442 | /system/app/Camera.apk
443 | /system/app/Protips.odex
444 | /system/app/CustomLocale.apk
445 | /system/app/CalendarProvider.odex
446 | /system/app/OpenWnn.odex
447 | /system/app/TelephonyProvider.apk
448 | /system/app/DrmProvider.apk
449 | /system/app/StingrayProgramMenuSystem.apk
450 | /system/app/CustomLocale.odex
451 | /system/app/Contacts.odex
452 | /system/app/Launcher2.odex
453 | /system/app/PicoTts.odex
454 | /system/app/ContactsProvider.odex
455 | /system/app/DownloadProviderUi.odex
456 | /system/app/NetSpeed.odex
457 | /system/app/GpsLocationTest.odex
458 | /system/app/Mms.apk
459 | /system/app/LiveWallpapersPicker.odex
460 | /system/app/Phone.odex
461 | /system/app/Music.apk
462 | /system/app/DefaultContainerService.apk
463 | /system/app/KeyChain.apk
464 | /system/app/PackageInstaller.apk
465 | /system/app/SdkSetup.odex
466 | /system/app/Calculator.apk
467 | /system/app/SoundRecorder.odex
468 | /system/app/SettingsProvider.odex
469 | /system/app/Browser.apk
470 | /system/app/SpeechRecorder.apk
471 | /system/app/SharedStorageBackup.apk
472 | /system/app/SoundRecorder.apk
473 | /system/app/Phone.apk
474 | /system/app/Gallery.apk
475 | /system/app/Exchange.odex
476 | /system/app/BackupRestoreConfirmation.apk
477 | /system/app/SystemUI.odex
478 | /system/app/ApplicationsProvider.apk
479 | /system/app/CalendarProvider.apk
480 | /system/app/HTMLViewer.odex
481 | /system/app/BackupRestoreConfirmation.odex
482 | /system/app/Calendar.odex
483 | /system/app/PinyinIME.apk
484 | /system/app/DownloadProviderUi.apk
485 | /system/app/DownloadProvider.odex
486 | /system/app/Fallback.apk
487 | /system/app/LatinIME.apk
488 | /system/app/Email.odex
489 | /system/app/ConnectivityTest.odex
490 | /system/app/StingrayProgramMenu.apk
491 | /system/app/HTMLViewer.apk
492 | /system/app/PicoTts.apk
493 | /system/app/Email.apk
494 | /system/app/DeskClock.odex
495 | /system/app/CertInstaller.odex
496 | /system/app/SharedStorageBackup.odex
497 | /system/app/PackageInstaller.odex
498 | /system/app/Browser.odex
499 | /system/app/VpnDialogs.odex
500 | /system/app/DeskClock.apk
501 | /system/app/Calculator.odex
502 | /system/app/SdkSetup.apk
503 | /system/app/Mms.odex
504 | /system/app/MediaProvider.odex
505 | /system/app/Contacts.apk
506 | /system/app/UserDictionaryProvider.odex
507 | /system/app/Fallback.odex
508 | /system/app/Calendar.apk
509 | /system/app/DefaultContainerService.odex
510 | /system/app/VpnDialogs.apk
511 | /system/bin/dumpsys
512 | /system/bin/InputReader_test
513 | /system/bin/iptables
514 | /system/bin/dumpstate
515 | /system/bin/am
516 | /system/bin/bmgr
517 | /system/bin/servicemanager
518 | /system/bin/dalvikvm
519 | /system/bin/monkey
520 | /system/bin/BlobCache_test
521 | /system/bin/mtpd
522 | /system/bin/rild
523 | /system/bin/pppd
524 | /system/bin/Looper_test
525 | /system/bin/ZipFileRO_test
526 | /system/bin/recordvideo
527 | /system/bin/system_server
528 | /system/bin/keystore_cli
529 | /system/bin/omx_tests
530 | /system/bin/installd
531 | /system/bin/audioloop
532 | /system/bin/svc
533 | /system/bin/showlease
534 | /system/bin/ime
535 | /system/bin/radiooptions
536 | /system/bin/logwrapper
537 | /system/bin/adb
538 | /system/bin/simg2img
539 | /system/bin/qemu-props
540 | /system/bin/dexopt
541 | /system/bin/ObbFile_test
542 | /system/bin/racoon
543 | /system/bin/InputDispatcher_test
544 | /system/bin/surfaceflinger
545 | /system/bin/sf2
546 | /system/bin/ping
547 | /system/bin/schedtest
548 | /system/bin/stream
549 | /system/bin/debuggerd
550 | /system/bin/String8_test
551 | /system/bin/netd
552 | /system/bin/record
553 | /system/bin/logcat
554 | /system/bin/keystore
555 | /system/bin/Unicode_test
556 | /system/bin/service
557 | /system/bin/linker
558 | /system/bin/sdcard
559 | /system/bin/mediaserver
560 | /system/bin/toolbox
561 | /system/bin/gdbserver
562 | /system/bin/gdbjithelper
563 | /system/bin/ping6
564 | /system/bin/check_prereq
565 | /system/bin/screenshot
566 | /system/bin/decoder
567 | /system/bin/bootanimation
568 | /system/bin/bu
569 | /system/bin/sensorservice
570 | /system/bin/vdc
571 | /system/bin/run-as
572 | /system/bin/ndc
573 | /system/bin/netcfg
574 | /system/bin/InputEvent_test
575 | /system/bin/screencap
576 | /system/bin/InputPublisherAndConsumer_test
577 | /system/bin/ip6tables
578 | /system/bin/dhcpcd
579 | /system/bin/updater
580 | /system/bin/recovery
581 | /system/bin/bugreport
582 | /system/bin/skia_test
583 | /system/bin/input
584 | /system/bin/gzip
585 | /system/bin/app_process
586 | /system/bin/InputChannel_test
587 | /system/bin/vold
588 | /system/bin/testid3
589 | /system/bin/stagefright
590 | /system/bin/qemud
591 | /system/bin/applypatch_static
592 | /system/bin/applypatch
593 | /system/bin/flash_image
594 | /system/bin/fsck_msdos
595 | /system/bin/ash
596 | /system/bin/pm
597 | /system/build.prop
598 | /system/xbin/procrank
599 | /system/xbin/showslab
600 | /system/xbin/netserver
601 | /system/xbin/showmap
602 | /system/xbin/strace
603 | /system/xbin/sane_schedstat
604 | /system/xbin/librank
605 | /system/xbin/btool
606 | /system/xbin/tcpdump
607 | /system/xbin/su
608 | /system/xbin/check-lost+found
609 | /system/xbin/ssh
610 | /system/xbin/daemonize
611 | /system/xbin/cpueater
612 | /system/xbin/rawbu
613 | /system/xbin/directiotest
614 | /system/xbin/scp
615 | /system/xbin/latencytop
616 | /system/xbin/netperf
617 | /system/xbin/nc
618 | /system/xbin/sqlite3
619 | /system/xbin/micro_bench
620 | /system/xbin/dexdump
621 | /system/xbin/add-property-tag
622 | /system/xbin/procmem
623 | /system/xbin/timeinfo
624 |
--------------------------------------------------------------------------------
/build_prepare.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #####################################################################
3 |
4 | echo -e "\nThis sets the OTA package path to /tmp and depending on your selection\nmake an insecure build as well.\n\n"
5 |
6 | BOARDCNFMK="$1"
7 |
8 | F_CHECK(){
9 | echo -e "\nYour current settings:\n"
10 | echo -e "OTA path (build/core/Makefile):\n$(grep 'INTERNAL_OTA_PACKAGE_TARGET :=' build/core/Makefile)"
11 | echo -e "\ninsecure state (vendor/lineage/config/common.mk):\n$(grep "secure=" vendor/lineage/config/common.mk)"
12 | echo -e "\nselinux state (device/lge/g4-common/BoardConfigCommon.mk):\n$(grep 'androidboot.selinux=' $BOARDCNFMK)"
13 | echo
14 | }
15 |
16 | F_INSEC(){
17 | echo -e "... prepare insecure building:"
18 | sed -i "s/ro.adb.secure=./ro.adb.secure=0/" vendor/lineage/config/common.mk
19 | echo -e "... set the build permissive..."
20 | sed -i 's/androidboot.selinux=enforcing/androidboot.selinux=permissive/g' $BOARDCNFMK
21 | F_CHECK
22 | }
23 |
24 | F_INSEC_OFF(){
25 | echo -e "... prepare secure building:"
26 | CPWD=$(pwd)
27 | cd vendor/lineage/ && git reset --hard
28 | cd $CPWD
29 | echo -e "vendor/lineage/config/common.mk:\t$(grep secure= vendor/lineage/config/common.mk |tr '\n' ,)\n"
30 | echo -e "... set the build to enforcing.."
31 | sed -i 's/androidboot.selinux=permissive/androidboot.selinux=enforcing/g' $BOARDCNFMK
32 | F_CHECK
33 | }
34 |
35 | F_TMP(){
36 | echo -e "... set path to ramdisk:"
37 | ROUTPATH=out/zip
38 | [ ! -L $ROUTPATH ] && ln -s /tmp/zip $ROUTPATH
39 | sed -i 's#INTERNAL_OTA_PACKAGE_TARGET := .*/$(name).zip#INTERNAL_OTA_PACKAGE_TARGET := ${OUT_DIR}/zip/$(name).zip#g' build/core/Makefile
40 | echo -e "build/core/Makefile:\t\t\t$(grep 'INTERNAL_OTA_PACKAGE_TARGET :=' build/core/Makefile)\n"
41 | F_CHECK
42 | }
43 |
44 | F_HELP(){
45 | echo -e "\nUSAGE / HELP"
46 | echo -e "----------------------\n"
47 | echo -e "Mandatory arg:\t (the full device tree path containing the mk file which defines the cmdline)"
48 | echo -e "Action args:\tinsecure, setpath, check, resetall"
49 | echo -e "\nmultiple options are allowed for: insecure and setpath but NOT for resetinsecure or resetall\n\n"
50 | exit 9
51 |
52 | }
53 |
54 | [ ! -f "$BOARDCNFMK" ] && echo -e "ERROR: $BOARDCNFMK is not a file!\n\n" && F_HELP && exit 99
55 | shift
56 |
57 | case $1 in
58 | help|-help|--help)
59 | F_HELP
60 | ;;
61 | insecure|setpath|resetinsecure|resetall|check)
62 | ;;
63 | *)
64 | echo -e "\nmissing arg!!"
65 | F_HELP
66 | ;;
67 | esac
68 |
69 | while [ ! -z "$1" ];do
70 | case $1 in
71 | insecure)
72 | F_INSEC
73 | shift
74 | ;;
75 | setpath)
76 | F_TMP
77 | shift
78 | ;;
79 | resetinsecure)
80 | F_INSEC_OFF
81 | exit
82 | ;;
83 | resetall)
84 | echo -e "This will RESET ALL PROJECTS to default (repo forall -vc 'git reset --hard')!"
85 | read -p "Are you sure? " ANS
86 | [ "$ANS" == "y" ] && repo forall -vc "git reset --hard"
87 | exit
88 | ;;
89 | check)
90 | F_CHECK
91 | exit
92 | ;;
93 | *)
94 | F_HELP
95 | ;;
96 | esac
97 | done
98 |
--------------------------------------------------------------------------------
/cherrypicker.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | ##################################################################################
3 | # forked from: https://github.com/GeoZac/android_vendor_unconv
4 | # License: GPLv3
5 | ##################################################################################
6 |
7 | import sys
8 | from argparse import ArgumentParser
9 |
10 | # Spice up the output
11 | from colorama import init, deinit, Fore # Back, Style
12 | from pygerrit2 import GerritRestAPI
13 | from pyperclip import copy
14 |
15 | from xtrasforcherrypicker import BLACKLIST, UPSTREAM, WHITELIST
16 |
17 | init(autoreset=False)
18 |
19 | DASHES = "=" * 55
20 | STARS = "*" * 55
21 |
22 |
23 | def show_banner():
24 | print(Fore.GREEN)
25 | print(STARS)
26 | print(" Cherrypick Helper")
27 | print(STARS)
28 |
29 |
30 | def check_excludes(args, c_topic):
31 | # Split excludes into a list so that we can skip multiple topics
32 | exclusions = list(args.E.split(",") if args.E is not None else "")
33 | if exclusions is not None and c_topic in exclusions:
34 | return False
35 |
36 | return True
37 |
38 |
39 | # Initialise some variables
40 | PROJECTS = {}
41 | TOPICS = []
42 | # Make a copy of the blocked repos so I can modify it if required
43 | BLOCK_LIST = BLACKLIST
44 | # Set of changes which will be skipped in all cases
45 | DNM = [
46 | ]
47 |
48 |
49 | def get_query(url, query):
50 | rest = GerritRestAPI(url=url, auth=None)
51 | return rest.get(query)
52 |
53 |
54 | # Print help and wait for a input
55 | # if args.H is not None:
56 | # show_help()
57 | def show_help():
58 | print(" Cherrypicker")
59 | print("")
60 |
61 |
62 | def check_upstream(args):
63 | status = "open" if args.O else "merged"
64 | if args.C == "ALL":
65 | projects = UPSTREAM
66 | else:
67 | projects = [project for project in UPSTREAM if args.C in project.lower()]
68 |
69 | for upstream_project in projects:
70 | upstream_numbers = ""
71 | upstream_addr, upstream_brnch = setup_project(args)
72 | upstream_project = f"android_{upstream_project}"
73 | # query = "/q/status:merged branch:lineage-15.1 project:LineageOS/android_{0}".format(project)
74 | query = f"/changes/?q=project:LineageOS/{upstream_project}%20status:{status}%20branch:{upstream_brnch}"
75 | upstream_changes = get_query(upstream_addr, query)[:15]
76 | print(Fore.BLUE, upstream_project)
77 | for upstream_change in reversed(upstream_changes):
78 | upstream_number = upstream_change["_number"]
79 | upstream_subject = upstream_change["subject"]
80 | if "translation" in upstream_subject:
81 | continue
82 | print(Fore.GREEN, upstream_number, Fore.CYAN, upstream_subject, Fore.RED, get_topic(upstream_change))
83 | upstream_numbers = upstream_numbers + " " + str(upstream_number)
84 | print(f"repopick -g {upstream_addr} {upstream_numbers} -P {set_path(upstream_project)}")
85 | input("Continue ?")
86 |
87 | deinit()
88 | sys.exit(0)
89 |
90 |
91 | # noinspection PyShadowingNames
92 | def check_mergeable(change):
93 | try:
94 | return change["mergeable"]
95 | except KeyError:
96 | return False
97 |
98 |
99 | def get_topic(m_change):
100 | try:
101 | return m_change["topic"]
102 | except KeyError:
103 | return None
104 |
105 |
106 | def adjust_for_qcom(change):
107 | branch = change["branch"]
108 | name = change["project"]
109 | if "pn5xx" in branch:
110 | name = name.replace("opensource_", "opensource_pn5xx_")
111 | change["project"] = name
112 | return change
113 | if "sn100x" in branch:
114 | name = name.replace("opensource_", "opensource_sn100x_")
115 | change["project"] = name
116 | return change
117 | if "caf" in branch:
118 | board = branch.split("caf-")[-1]
119 | name = name.replace("qcom_", f"qcom-caf_{board}_")
120 | change["project"] = name
121 | return change
122 | if "-legacy-um" in branch:
123 | name = name.replace("sepolicy", "sepolicy-legacy-um")
124 | change["project"] = name
125 | return change
126 | if "-legacy" in branch:
127 | name = name.replace("sepolicy", "sepolicy-legacy")
128 | change["project"] = name
129 | return change
130 | print("Caught a new one to adjust for path", branch)
131 | return change
132 |
133 |
134 | # Nope these only worth picking up
135 | def setup_project(args, verbose=False):
136 | if args.R == "los":
137 | msg = "Seems,serious"
138 | addr = "https://review.lineageos.org"
139 | base_branch = args.B if args.B is not None else "lineage-21.0"
140 | # Kill the blocklist if searching LineageOS gerrit
141 | global BLOCK_LIST
142 | BLOCK_LIST = []
143 | elif args.R is not None:
144 | msg = "Who dis?"
145 | addr = args.R
146 | base_branch = args.B
147 | else:
148 | msg = "Meh,its just ice cold"
149 | addr = "https://gerrit.aicp-rom.com"
150 | base_branch = args.B if args.B is not None else "u14.0"
151 | if verbose:
152 | print(Fore.YELLOW, f"\b{msg}")
153 | if not base_branch:
154 | print("Need to specify a branch,use -B argument")
155 | sys.exit(0)
156 |
157 | return addr, base_branch
158 |
159 |
160 | def set_query(args):
161 | if args.Q is not None:
162 | return f"/changes/?q={args.Q}"
163 | query = "/changes/?q=status:open"
164 | if args.T is None:
165 | final_q = query
166 | else:
167 | q_topic = f" topic:{args.T}"
168 | final_q = "".join([query, q_topic])
169 | if args.D:
170 | print(final_q)
171 | return final_q
172 |
173 |
174 | def get_changes(args):
175 | gerrit_addr, gerrit_branch = setup_project(args, True)
176 | query = set_query(args)
177 | changes = get_query(gerrit_addr, query)
178 | if args.D:
179 | print(query)
180 | total = len(changes)
181 | if total > 200 and args.S is None:
182 | print(f"{total} Changes \nBetter to add a start number or streamline search")
183 | if input("Set it from manifest ?").lower() == "y":
184 | args.S = set_start(args)
185 | changes = get_query(gerrit_addr, query)
186 | else:
187 | sys.exit(0)
188 |
189 | if not changes:
190 | print("No changes, try playing with arguments")
191 | sys.exit(0)
192 | else:
193 | print(Fore.LIGHTMAGENTA_EX, f"\b{total} changes")
194 | return changes, gerrit_branch
195 |
196 |
197 | def set_path(project_name):
198 | # Broken cases: external_wpa_supplicant_8
199 |
200 | if "build" in project_name:
201 | project_name += "_make"
202 |
203 | elif project_name in ["AICP/bionic", "AICP/art"]:
204 | return project_name.strip("AICP/")
205 |
206 | elif "vendor_lineage" in project_name:
207 | project_name = "vendor_aicp"
208 | return project_name.replace("_", "/")
209 |
210 | if "_" not in project_name:
211 | return "*Manifest Change*"
212 |
213 | if "AICP" in project_name:
214 | project_path = project_name.split("AICP/")[1]
215 | project_path = project_path.replace("_", "/")
216 | return project_path
217 |
218 | project_path = project_name.split("_", 1)[1]
219 | project_path = project_path.replace("_", "/")
220 | return project_path
221 |
222 |
223 | def set_start(args):
224 | if args.S is not None:
225 | return args.S
226 | # platform_manifest gets only changed once in a while
227 | gerrit_addr, current_branch = setup_project(args)
228 | full_query = f"/changes/?q=project:AICP/platform_manifest status:merged branch:{current_branch}"
229 | if "aicp" in gerrit_addr and not args.S: # Get the last merged important change
230 | platform_changes = get_query(gerrit_addr, full_query)
231 | if not platform_changes:
232 | return 0
233 | last_patch = platform_changes[5]["_number"]
234 | last_patch_change = platform_changes[5]["subject"]
235 | print(Fore.RED, f"\b{last_patch} {last_patch_change} set as start for commit filter\n")
236 | args.S = last_patch
237 | return last_patch
238 |
239 | return 0
240 |
241 |
242 | def append_projects(args, change):
243 | project = change["project"]
244 | PROJECTS[project] = {}
245 | PROJECTS[project]["path"] = set_path(project)
246 | # AICP can resolve its own paths, so it gets a separate string of repopick numbers
247 | if args.R is not None:
248 | PROJECTS[project]["gerrit"] = setup_project(args)[0]
249 | PROJECTS[project]["numbers"] = [change["_number"]]
250 |
251 |
252 | def parse_changes(args, changes, gerrit_branch):
253 | skipped = 0
254 | merged = False
255 | total = len(changes)
256 | digits = len(str(changes[0]["_number"]))
257 | for index, change in enumerate(reversed(changes)):
258 | # print(change)
259 | number = change["_number"]
260 | subject = change["subject"]
261 | topic = get_topic(change)
262 | project = change["project"]
263 | can_merge = check_mergeable(change)
264 | if number >= set_start(args) and gerrit_branch in change["branch"]:
265 | if not any(item in project.lower() for item in BLOCK_LIST) or any(
266 | item in project.lower() for item in WHITELIST):
267 | if gerrit_branch != change["branch"]:
268 | change = adjust_for_qcom(change)
269 | if (change["status"] != "MERGED" or args.D or args.M) and number not in DNM:
270 | print(
271 | Fore.GREEN, f"\b{str(index + 1).zfill(3)}/{total}",
272 | Fore.BLUE, str(number).rjust(digits),
273 | Fore.CYAN, str(can_merge).ljust(7),
274 | Fore.LIGHTBLUE_EX, subject[:55].ljust(55),
275 | Fore.YELLOW, project[-20:].ljust(20), "|",
276 | Fore.MAGENTA, topic if topic else ""
277 | )
278 | if (not check_excludes(args, topic)) or (not can_merge and not args.M):
279 | skipped += 1
280 | continue
281 | if topic not in TOPICS and topic is not None:
282 | TOPICS.append(topic)
283 | if change["status"] == "MERGED":
284 | merged = True
285 | if project not in PROJECTS:
286 | append_projects(args, change)
287 |
288 | else:
289 | PROJECTS[project]["numbers"].append(number)
290 | elif args.D:
291 | print(
292 | Fore.RED, f"\b{str(index + 1).zfill(3)}/{total}",
293 | Fore.RED, str(number).rjust(digits),
294 | Fore.RED, "Ignored",
295 | Fore.RED, subject[:55].ljust(55),
296 | Fore.RED, project[-20:].ljust(20), "|",
297 | Fore.RED, topic if topic else ""
298 | )
299 | return skipped, merged
300 |
301 |
302 | def present_changes(args, skipped, merged):
303 | to_pick = 0
304 | cherry_picked = 0
305 | numbers = ""
306 | fwb = "AICP/frameworks_base"
307 | print(DASHES)
308 | print(Fore.GREEN, f"\b{len(PROJECTS)} projects")
309 | print(f"Skipping {args.E if args.E is not None else 'None'}")
310 | print(DASHES)
311 | for project in PROJECTS:
312 | change_numbers = PROJECTS[project]["numbers"]
313 | change_numbers.sort() # Doesn't seem to work in next line
314 | count = len(change_numbers)
315 | print(Fore.YELLOW, "\brepopick", Fore.RED, "\b-g", PROJECTS[project].get("gerrit", "\b" * 4),
316 | "-f" if merged else "\b", "-P", PROJECTS[project]["path"],
317 | " ".join(str(x) for x in change_numbers), Fore.CYAN)
318 | to_pick += len(change_numbers)
319 | if args.R is None and fwb in project:
320 | continue
321 | cherry_picked = count if count > cherry_picked else cherry_picked
322 | numbers += " ".join(str(x) for x in change_numbers) + " "
323 | if args.R is None and cherry_picked > 0:
324 | print(DASHES)
325 | pick_string = f"repopick {numbers}-c {cherry_picked}"
326 | print(Fore.CYAN, f"\b{pick_string}")
327 | copy(pick_string)
328 | if PROJECTS.get(fwb, None): # Not all queries may have a change in fwb
329 | fwb_changes = PROJECTS[fwb]["numbers"]
330 | print(Fore.CYAN, "\brepopick", " ".join(str(x) for x in fwb_changes), "-c", args.F + len(fwb_changes))
331 | print(DASHES)
332 | if TOPICS:
333 | print(Fore.GREEN, "\brepopick -t", " ".join(item for item in TOPICS if item))
334 | print(DASHES)
335 | print(Fore.MAGENTA, f"\b{to_pick} commits to pick")
336 | print(Fore.BLUE, f"\b{skipped} commits skipped")
337 | print(DASHES)
338 |
339 |
340 | def parse_arguments():
341 | parser = ArgumentParser()
342 |
343 | # All argument goes here
344 | parser.add_argument("-R", help="Select ROM to cherry pick from", type=str.lower)
345 | parser.add_argument("-T", help="Topics to pick")
346 | parser.add_argument("-S", type=int, help="Commit to start searching from")
347 | parser.add_argument("-B", help="Branch to search for")
348 | parser.add_argument("-D", action="store_true", help="Debug mode")
349 | parser.add_argument("-M", action="store_true", default=True, help="Check mergeability")
350 | parser.add_argument("-C", const="ALL", nargs="?", help="Check upstream for any new changes")
351 | parser.add_argument("-O", action="store_true", help="Search upstream for open changes")
352 | parser.add_argument("-Q", help="Query to search for")
353 | parser.add_argument("-E", help="Exclude topics")
354 | parser.add_argument("-F", nargs="?", const=1, type=int, default=22, help="No of Commits to check for on fwb")
355 |
356 | # parser.add_argument("-h", help="Show the f***ing help and exit")
357 | return parser.parse_args()
358 |
359 |
360 | # Always keep this method above main, for better control
361 | def set_defaults(args):
362 | assert args is not None
363 |
364 |
365 | def repo_pick():
366 | args = parse_arguments()
367 | set_defaults(args)
368 | if args.C is not None:
369 | args.R = "los"
370 | args.B = None
371 | check_upstream(args)
372 | changes, branch = get_changes(args)
373 | skipped, merged = parse_changes(args, changes, branch)
374 | present_changes(args, skipped, merged)
375 |
376 |
377 | if __name__ == "__main__":
378 | show_banner()
379 | repo_pick()
380 |
--------------------------------------------------------------------------------
/codereview/bracechecker.c:
--------------------------------------------------------------------------------
1 | /* Program to check rudimentary syntax errors like unmatch braces,brakets or parenthesis */
2 |
3 | #include
4 |
5 | int brace,brack,paren;
6 |
7 | void incomment();
8 | void inquote(int c);
9 | void search(int c);
10 |
11 | int main(void)
12 | {
13 | int c;
14 |
15 | extern int brace,brack,paren;
16 | extern int bracecnt;
17 |
18 | while((c=getchar())!=EOF)
19 | if( c == '/')
20 | if((c=getchar())== '*')
21 | incomment();
22 | else
23 | search(c);
24 | else if( c == '\'' || c == '"')
25 | inquote(c);
26 | else
27 | search(c);
28 |
29 | if( brace < 0)
30 | {
31 | printf("Unmatched Braces\n");
32 | printf("%d\n", bracecnt);
33 | brace = 0;
34 | }
35 | else if( brack < 0)
36 | {
37 | printf("Unmatched brackets\n");
38 | brack = 0;
39 | }
40 | else if( paren < 0)
41 | {
42 | printf("Unmatched parenthesis\n");
43 | paren = 0;
44 | }
45 |
46 | if(brace > 0)
47 | printf("Unmatched braces\n");
48 | else if(brack > 0)
49 | printf("Unmatched brackets\n");
50 | else if(paren > 0)
51 | printf("Unmatched parenthesis\n");
52 |
53 | return 0;
54 | }
55 |
56 | void incomment()
57 | {
58 | int c,d;
59 |
60 | c = getchar();
61 | d = getchar();
62 |
63 | while(c != '*' || d != '/')
64 | {
65 | c = d;
66 | d = getchar();
67 | }
68 | }
69 |
70 | void inquote(int c)
71 | {
72 | int d;
73 |
74 | putchar(c);
75 |
76 | while((d=getchar())!=c)
77 | if( d == '\\')
78 | getchar();
79 | }
80 |
81 | void search(int c)
82 | {
83 | extern int brace,brack,paren;
84 | int bracecnt;
85 |
86 | if ( c == '{')
87 | ++bracecnt,
88 | printf("%c\n", c),
89 | --brace;
90 | else if ( c == '}')
91 | ++brace;
92 | else if( c == '(')
93 | --brack;
94 | else if( c == ')')
95 | ++brack;
96 | else if( c == '[')
97 | --paren;
98 | else if( c == ']')
99 | ++paren;
100 | }
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/codereview/bracechecker.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 | # python 3
4 | # spec at http://xahlee.org/comp/validate_matching_brackets.html
5 | # 2011-07-17
6 | # by Raymond Hettinger
7 |
8 | input_dir = "/home/xdajog/android/cm_kk/kernel/samsung/i927/drivers/usb/gadget/"
9 |
10 | import os, re
11 |
12 | def check_balance(characters):
13 | '''Return -1 if all delimiters are balanced or
14 | the char number of the first delimiter mismatch.
15 |
16 | '''
17 | openers = {
18 | '(': ')',
19 | '{': '}',
20 | '[': ']'
21 | }
22 | closers = set(openers.values())
23 | stack = []
24 | for i, c in enumerate(characters, start=1):
25 | if c in openers:
26 | stack.append(openers[c])
27 | elif c in closers:
28 | if not stack or c != stack.pop():
29 | return i
30 | if stack:
31 | print("MISMATCH AT:")
32 | print(stack)
33 | return i
34 | return -1
35 |
36 | def scan(directory, encoding='utf-8'):
37 | for dirpath, dirnames, filenames in os.walk(directory):
38 | for filename in filenames:
39 | fullname = os.path.join(dirpath, filename)
40 | print ( "processing:" + fullname)
41 | with open(fullname, 'r', encoding=encoding) as f:
42 | try:
43 | characters = f.read()
44 | except UnicodeDecodeError:
45 | continue
46 | position = check_balance(characters)
47 | if position >= 0:
48 | print('{0!r}: {1}'.format(position, fullname))
49 |
50 | scan(input_dir)
51 |
52 | print ("done")
53 |
--------------------------------------------------------------------------------
/codereview/bracechecker.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | ##################################################################
3 | #
4 | # Taken from:
5 | # http://unix.stackexchange.com/questions/10267/how-to-find-unmatched-brackets-in-a-text-file
6 | #
7 | ##################################################################
8 |
9 | # Itentify the script
10 | bname="$(basename "$0")"
11 | # Make a work dir
12 | wdir="/tmp/$USER/$bname"
13 | [[ ! -d "$wdir" ]] && mkdir -p "$wdir"
14 |
15 | # Arg1: The bracket pair 'string'
16 | pair="$1"
17 | # pair='[]' # test
18 | # pair='<>' # test
19 | # pair='{}' # test
20 | # pair='()' # test
21 |
22 | # Arg2: The input file to test
23 | ufile="$2"
24 | # Build a test source file
25 | ifile="$wdir/$bname.in"
26 | cp "$ufile" "$ifile"
27 | while IFS= read -r line ;do
28 | echo "$line" >> "$ifile"
29 | done < <
33 | < >
34 | < > > >
35 | ----+----1----+----2----+----3----+----4----+----5----+----6
36 | { } { } } } }
37 | ( ) ( ( ( ) )
38 | ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
39 | EOF
40 |
41 | echo "File = $ifile"
42 | # Count how many: Left, Right, and Both
43 | left=${pair:0:1}
44 | rght=${pair:1:1}
45 | echo "Pair = $left$rght"
46 |
47 | # Make a stripped-down 'skeleton' of the source file - brackets only
48 | skel="/tmp/$USER/$bname.skel"
49 | cp /dev/null "$skel"
50 |
51 | # Make a String Of Brackets file ... (It is tricky manipulating bash strings with []..
52 | sed 's/[^'${rght}${left}']//g' "$ifile" > "$skel"
53 | < "$skel" tr -d '\n' > "$skel.str"
54 | Left=($(<"$skel.str" tr -d "$left" |wc -m -l)); LeftCt=$((${Left[1]}-${Left[0]}))
55 | Rght=($(<"$skel.str" tr -d "$rght" |wc -m -l)); RghtCt=$((${Rght[1]}-${Rght[0]}))
56 | #Rght=($(<"$skel.str" tr -d "$left" |wc -m -l)); LeftCt=$((${Rght[1]}-${Rght[0]}))
57 | #Left=($(<"$skel.str" tr -d "$rght" |wc -m -l)); RghtCt=$((${Left[1]}-${Left[0]}))
58 |
59 | yBkts=($(sed -e "s/\(.\)/ \1 /g" "$skel.str"))
60 | BothCt=$((LeftCt+RghtCt))
61 | eleCtB=${#yBkts[@]}
62 | echo
63 |
64 | if (( eleCtB != BothCt )) ; then
65 | echo "ERROR: array Item Count ($eleCtB)"
66 | echo " should equal BothCt ($BothCt)"
67 | exit 1
68 | else
69 | grpIx=0 # Keep track of Groups of nested pairs
70 | eleIxFir[$grpIx]=0 # Ix of First Bracket in a specific Group
71 | eleCtL=0 # Count of Left brackets in current Group
72 | eleCtR=0 # Count of Right brackets in current Group
73 | errIx=-1 # Ix of an element in error.
74 | for (( eleIx=0; eleIx <= eleCtB; eleIx++ )) ; do
75 | if [[ "${yBkts[eleIx]}" == "$left" ]] ; then
76 | # Left brackets are 'okay' until proven otherwise
77 | ((eleCtL++)) # increment Left bracket count
78 | else
79 | ((eleCtR++)) # increment Right bracket count
80 | # Right brackets are 'okay' until their count exceeds that of Left brackets
81 | if (( eleCtR > eleCtL )) ; then
82 | echo
83 | echo "ERROR: MIS-matching Right \"$rght\" in Group $((grpIx+1)) (at Bracket $((eleIx+1)) overall)"
84 | errType=$rght
85 | errIx=$eleIx
86 | break
87 | elif (( eleCtL == eleCtR )) ; then
88 | echo "*INFO: Group $((grpIx+1)) contains $eleCtL matching pairs"
89 | # Reset the element counts, and note the first element Ix for the next group
90 | eleCtL=0
91 | eleCtR=0
92 | ((grpIx++))
93 | eleIxFir[$grpIx]=$((eleIx+1))
94 | fi
95 | fi
96 | done
97 | #
98 | if (( eleCtL > eleCtR )) ; then
99 | # Left brackets are always potentially valid (until EOF)...
100 | # so, this 'error' is the last element in array
101 | echo
102 | echo "eleCtR > eleCtL are: $eleCtR $eleCtL"
103 | echo "ERROR: *END-OF-FILE* encountered after Bracket $eleCtB."
104 | echo " A Left \"$left\" is un-paired in Group $((grpIx+1))."
105 | errType=$left
106 | unpairedCt=$((eleCtL-eleCtR))
107 | errIx=$((${eleIxFir[grpIx]}+unpairedCt-1))
108 | echo " Group $((grpIx+1)) has $unpairedCt un-paired Left \"$left\"."
109 | echo " Group $((grpIx+1)) begins at Bracket $((eleIxFir[grpIx]+1))."
110 | fi
111 |
112 | # On error, get Line and Column numbers
113 | if (( errIx >= 0 )) ; then
114 | errLNum=0 # Source Line number (current).
115 | eleCtSoFar=0 # Count of bracket-elements in lines processed so far.
116 | errItemNum=$((errIx+1)) # error Ix + 1 (ie. "1 based")
117 | # Read the skeketon file to find the error line-number
118 | while IFS= read -r skline ; do
119 | ((errLNum++))
120 | brackets="${skline//[^"${rght}${left}"]/}" # remove whitespace
121 | ((eleCtSoFar+=${#brackets}))
122 | if (( eleCtSoFar >= errItemNum )) ; then
123 | # We now have the error line-number
124 | # ..now get the relevant Source Line
125 | excerpt=$(< "$ifile" tail -n +$errLNum |head -n 1)
126 | # Homogenize the brackets (to be all "Left"), for easy counting
127 | mogX="${excerpt//$rght/$left}"; mogXCt=${#mogX} # How many 'Both' brackets on the error line?
128 | if [[ "$errType" == "$left" ]] ; then
129 | # R-Trunc from the error element [inclusive]
130 | ((eleTruncCt=eleCtSoFar-errItemNum+1))
131 | for (( ele=0; ele
10 | ##################################################################################################
11 | VERSION="v0.7"
12 |
13 | # a static date when you start using this script the first time
14 | # it is just used for informational purpose to show in the title of the total count
15 | FIRSTRUN="2019-01-01"
16 |
17 | # start this tool like this to
18 | # DEBUG=1 gendllog_ng.sh
19 | [ -z "$DEBUG" ] && DEBUG=0
20 |
21 | # the base directory where the report file(s) should be placed
22 | ROMDIR="/home/nightlies/roms/theme"
23 |
24 | # the full path(s) to the webserver log(s)
25 | # multiple log paths need to be separated by a space
26 | WEBLOG='/var/lib/lxd/containers/ota/rootfs/var/log/apache2/access_ssl.log /var/lib/lxd/containers/ota/rootfs/var/log/apache2/access.log'
27 |
28 | # logrotate command to execute after each run:
29 | # ensure you use '-f' to ENFORCE rotating so we do not count things again on next run
30 | LOGREXEC="lxc exec ota -- logrotate -f /etc/logrotate.d/apache2"
31 |
32 | # report file names with their corresponding search pattern
33 | # the format is as follows:
34 | # STAT[N]=:
35 | # STAT[N] can be any number, just ensure you put new ones in "STATFILES=" variable
36 | # is a local unique path accessible from the internet, becomes the actual report file
37 | # can be 1 or multiple regex pattern separated by a pipe
38 | STATF1="$ROMDIR/ota_stats_los.html:lineage/.*/lineage.*\.zip"
39 | STATF2="$ROMDIR/ota_stats_e-os.html:e-os/.*/e-.*\.zip"
40 | STATF3="$ROMDIR/ota_stats_axp.html:axp/.*/AXP.*\.zip"
41 |
42 | # if you add additional STATF[N] statements above, add them here as well
43 | # the parser will only handle the STATFILES var
44 | STATFILES="$STATF1 $STATF2 $STATF3"
45 |
46 | # besides the above defined search patterns these are excluded always
47 | # separated by pipe, pattern can be a regex
48 | EXCLUDE="/theme/|css|md5|sha256|sha512|\.prop|/api/"
49 |
50 | ################################################################################################################################
51 |
52 | F_HELP(){
53 | cat <<_EOHELP
54 |
55 | $0 version - $VERSION
56 | a helper to generate VERY basic html reports
57 |
58 | it will:
59 | 1. parse all logfiles defined in WEBLOG (currently set: $WEBLOG)
60 | 2. search for given pattern(s)
61 | 3. generate counts for found patterns
62 | 4. stores the total result count in a persistent file
63 | 5. generates a stats html report
64 | 6. triggers a logrotate if all went fine
65 |
66 | Usage:
67 |
68 | $0 (without arguments) regular usage. will run, parse, generate stats
69 | $0 fresh will skip any previous calculation results
70 | $0 help|-help|--help this message
71 |
72 | Environment:
73 |
74 | export DEBUG=1 will print a lot of information and skips:
75 | persistent file creation (step4), logrotate (step6)
76 | step5 will create a stats file named .debug.html
77 |
78 | Schedule:
79 |
80 | once the script is working as expected create e.g. a /etc/cron.d/gen-stats:
81 |
82 | # generate download stats
83 | SHELL=/bin/bash
84 | PATH=/sbin:/bin:/usr/sbin:/usr/bin
85 | 30 1 * * 1 root /root/gen_simple_dl-stats.sh
86 |
87 | with the above cron you will just see the stats from the last week. if you want e.g. monthly
88 | logs you should use cron.monthly to generate it monthly but then you might need to adjust
89 | the logrotate.d config as well! the logrotate.d conf should always fire way later then your
90 | cron so it actually should NEVER gets executed - because this is handled by this script.
91 |
92 | _EOHELP
93 | }
94 |
95 | SKIPCALC=0
96 |
97 | # parse args
98 | case $1 in
99 | help|-help|--help) F_HELP; exit;;
100 | *clean|clean) SKIPCALC=1 ;;
101 | esac
102 |
103 | [ $DEBUG -eq 1 ] && SKIPCALC=1
104 |
105 | # logging func
106 | F_LOG(){
107 | MODE=$1
108 | MSG="$2"
109 |
110 | case $MODE in
111 | D) echo -e "$(date '+%F %T') - DEBUG - $MSG" ;;
112 | *) echo -e "$(date '+%F %T') - INFO - $MSG" ;;
113 | esac
114 | }
115 |
116 | # parse logs...
117 | for statfile in $STATFILES;do
118 | if [ $DEBUG -eq 1 ];then
119 | SHTML="${statfile/:*}.debug.html"
120 | cp ${statfile/:*} $SHTML
121 | else
122 | SHTML="${statfile/:*}"
123 | fi
124 | SEARCHSTR="${statfile/*:}"
125 | TOTALCNT=${SHTML}.total
126 | PERM_CNT_FILE=${SHTML}.permtotal
127 |
128 | [ $DEBUG -eq 1 ] && F_LOG D "SHTML: $SHTML, TOTALCNT: $TOTALCNT, PERM_CNT_FILE: $PERM_CNT_FILE"
129 |
130 | cat > $SHTML <
132 |
133 |
134 |
135 | Download stats
136 |
137 |
138 |
144 |
145 |
146 |