Quantcast
Channel: xda-developers - Android Software and Hacking General [Developers Only]
Viewing all articles
Browse latest Browse all 3614

[OPENSOURCE TOOL][Android 5.0] cross-platform deodex tool; create GApps zip yourself

$
0
0
make-gapps-zip is an opensource project that allows you to create your own flashable GApps zip from existing firmware (e.g., Nexus factory images) on Linux/OS X/Windows. AFAIK there is only a Windows-only tool. Some other "devs" only publish GApps packages and are not transparent about the origin/methodology. For this reason, the project was started to document GApps files (Android >= 5.0) and create tooling for it.

The main tools that is part of this project are odex2apk.py and make-update-zip.py. Since these are Python scripts, these run on Linux, OS X and Windows. The only other dependency is Java 7 or newer.

odex2apk.py uses oat2dex.jar by Riddle Hsu. Given an OAT-optimized .odex file, it will add classes.dex to the APK file if missing. This process reproducible such that the resulting file contents are byte-for-byte identical given the same source files.

make-update-zip.py uses the above odex2apk.py script to create deodexed APK files, then creates a flashable .zip file that can be installed from recovery.

Links:
Example invocation and output:
Quote:

[peter@ubuntu1404 make-gapps-zip] $ ls -F /tmp/pfiles/
app/ bin/ build.prop etc/ fonts/ framework/ lib/ media/ priv-app/ recovery-from-boot.p usr/ vendor/ xbin/
[peter@ubuntu1404 make-gapps-zip] $ ./make-update-zip.py -o update.zip -c keys/testkey.x509.pem -k keys/testkey.pk8 -r /tmp/pfiles GoogleLoginService GoogleServicesFramework Phonesky PrebuiltGmsCore GoogleContactsSyncAdapter CalendarProvider -f lib/libjni_latinimegoogle.so
Code:

odex2apk: Processing boot directory, may take a minute...
odex2apk: Added /tmp/pfiles/priv-app/GoogleLoginService/arm/GoogleLoginService.dex to /tmp/pfiles/priv-app/GoogleLoginService/GoogleLoginService.apk as classes.dex
odex2apk: /tmp/pfiles/priv-app/GoogleLoginService/GoogleLoginService.apk is ready!
odex2apk: Added /tmp/pfiles/priv-app/GoogleServicesFramework/arm/GoogleServicesFramework.dex to /tmp/pfiles/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk as classes.dex
odex2apk: /tmp/pfiles/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk is ready!
odex2apk: /tmp/pfiles/priv-app/Phonesky/Phonesky.apk is ready!
odex2apk: /tmp/pfiles/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk is ready!
odex2apk: Added /tmp/pfiles/app/GoogleContactsSyncAdapter/arm/GoogleContactsSyncAdapter.dex to /tmp/pfiles/app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk as classes.dex
odex2apk: /tmp/pfiles/app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk is ready!
odex2apk: Added /tmp/pfiles/priv-app/CalendarProvider/arm/CalendarProvider.dex to /tmp/pfiles/priv-app/CalendarProvider/CalendarProvider.apk as classes.dex
odex2apk: /tmp/pfiles/priv-app/CalendarProvider/CalendarProvider.apk is ready!
make-update-zip: Adding system/priv-app/GoogleLoginService/GoogleLoginService.apk
make-update-zip: Adding system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
make-update-zip: Adding system/priv-app/Phonesky/Phonesky.apk
make-update-zip: Adding system/priv-app/PrebuiltGmsCore/lib/arm/libsslwrapper_jni.so
make-update-zip: Adding system/priv-app/PrebuiltGmsCore/lib/arm/libjgcastservice.so
make-update-zip: Adding system/priv-app/PrebuiltGmsCore/lib/arm/libgmscore.so
make-update-zip: Adding system/priv-app/PrebuiltGmsCore/lib/arm/libgms-ocrclient.so
make-update-zip: Adding system/priv-app/PrebuiltGmsCore/lib/arm/libgcastv2_support.so
make-update-zip: Adding system/priv-app/PrebuiltGmsCore/lib/arm/libgcastv2_base.so
make-update-zip: Adding system/priv-app/PrebuiltGmsCore/lib/arm/libgames_rtmp_jni.so
make-update-zip: Adding system/priv-app/PrebuiltGmsCore/lib/arm/libconscrypt_gmscore_jni.so
make-update-zip: Adding system/priv-app/PrebuiltGmsCore/lib/arm/libWhisper.so
make-update-zip: Adding system/priv-app/PrebuiltGmsCore/lib/arm/libAppDataSearch.so
make-update-zip: Adding system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk
make-update-zip: Adding system/app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk
make-update-zip: Adding system/priv-app/CalendarProvider/CalendarProvider.apk
make-update-zip: Adding system/lib/libjni_latinimegoogle.so
make-update-zip: Created zip update.zip, trying to sign it...
make-update-zip: Update zip update.zip is ready!

[peter@ubuntu1404 make-gapps-zip] $ unzip -l update.zip
Code:

Archive:  update.zip
signed by SignApk
  Length      Date    Time    Name
---------  ---------- -----  ----
    1675  2008-02-29 03:33  META-INF/com/google/android/update-binary
    36483  2008-02-29 03:33  system/app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk
  677372  2008-02-29 03:33  system/lib/libjni_latinimegoogle.so
  136107  2008-02-29 03:33  system/priv-app/CalendarProvider/CalendarProvider.apk
  4473468  2008-02-29 03:33  system/priv-app/GoogleLoginService/GoogleLoginService.apk
  3388642  2008-02-29 03:33  system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
 11703391  2008-02-29 03:33  system/priv-app/Phonesky/Phonesky.apk
 28516157  2008-02-29 03:33  system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk
  517592  2008-02-29 03:33  system/priv-app/PrebuiltGmsCore/lib/arm/libAppDataSearch.so
  452308  2008-02-29 03:33  system/priv-app/PrebuiltGmsCore/lib/arm/libWhisper.so
    13500  2008-02-29 03:33  system/priv-app/PrebuiltGmsCore/lib/arm/libconscrypt_gmscore_jni.so
    13496  2008-02-29 03:33  system/priv-app/PrebuiltGmsCore/lib/arm/libgames_rtmp_jni.so
  177520  2008-02-29 03:33  system/priv-app/PrebuiltGmsCore/lib/arm/libgcastv2_base.so
  194000  2008-02-29 03:33  system/priv-app/PrebuiltGmsCore/lib/arm/libgcastv2_support.so
  304752  2008-02-29 03:33  system/priv-app/PrebuiltGmsCore/lib/arm/libgms-ocrclient.so
  1630700  2008-02-29 03:33  system/priv-app/PrebuiltGmsCore/lib/arm/libgmscore.so
    30092  2008-02-29 03:33  system/priv-app/PrebuiltGmsCore/lib/arm/libjgcastservice.so
  1243632  2008-02-29 03:33  system/priv-app/PrebuiltGmsCore/lib/arm/libsslwrapper_jni.so
    4995  2008-02-29 03:33  META-INF/com/android/otacert
    2100  2008-02-29 03:33  META-INF/MANIFEST.MF
    2324  2008-02-29 03:33  META-INF/CERT.SF
    1714  2008-02-29 03:33  META-INF/CERT.RSA
---------                    -------
 53522020                    22 files

[peter@ubuntu1404 make-gapps-zip] $ sha1sum update.zip
87986ca452217658c6e3d72b91b631f40fe6dd2f update.zip
[peter@ubuntu1404 make-gapps-zip] $ du -b update.zip # size in bytes
30224904 update.zip
[peter@ubuntu1404 make-gapps-zip] $ grep ro.build.description /tmp/pfiles/build.prop
ro.build.description=hammerhead-user 5.1.1 LMY48I 2074855 release-keys
[peter@ubuntu1404 make-gapps-zip] $ java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
Note: the tool is designed for Android 5.0 or newer. It can be adapted for Android 4.4 by using baksmali and adjusting the paths, but meh, it is outdated stuff... Have fun with these docs and tools!

Viewing all articles
Browse latest Browse all 3614

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>