From 8353c56c0bf68a7f80881e33d427716a03473061 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Sun, 10 Apr 2016 20:20:17 -0400 Subject: [PATCH] Modify setup in wrappers for /system/bin/ commands On several devices several tools in /system/bin/ requires LD_LIBRARY_PATH to contain /system/lib(64). Check for the bit-ness with `getprop ro.product.cpu.abilist64` and setup the environment accordingly. Closes #193. Closes #206. --- packages/jack/build.sh | 2 +- packages/jack/jack.sh | 25 ++++++++----------------- packages/termux-api/build.sh | 2 +- packages/termux-api/termux-api.c | 11 ++++------- packages/termux-tools/build.sh | 20 +++++++++++++------- packages/termux-tools/termux-reload-settings | 2 +- packages/termux-tools/termux-setup-storage | 2 +- 7 files changed, 29 insertions(+), 35 deletions(-) diff --git a/packages/jack/build.sh b/packages/jack/build.sh index deb758a2..35584fd6 100755 --- a/packages/jack/build.sh +++ b/packages/jack/build.sh @@ -4,7 +4,7 @@ TERMUX_PKG_HOMEPAGE=http://tools.android.com/tech-docs/jackandjill TERMUX_PKG_DESCRIPTION="Java Android Compiler Kit" TERMUX_PKG_VERSION="1.1-mr2" -TERMUX_PKG_BUILD_REVISION=2 +TERMUX_PKG_BUILD_REVISION=3 TERMUX_PKG_PLATFORM_INDEPENDENT=true termux_step_make () { diff --git a/packages/jack/jack.sh b/packages/jack/jack.sh index c439255d..db43657c 100755 --- a/packages/jack/jack.sh +++ b/packages/jack/jack.sh @@ -4,20 +4,11 @@ export ANDROID_DATA=@TERMUX_PREFIX@/var/android/ mkdir -p $ANDROID_DATA/dalvik-cache -# Find the right lib folder for dalvikvm. We cannot take LD_LIBRARY_PATH -# as is since it contains Termux-supplied libraries which may clash with -# system ones. -LIBFOLDER=/system/lib -if test -d /system/lib64; then - LIBFOLDER=/system/lib64 -fi - -LD_LIBRARY_PATH=$LIBFOLDER \ - exec dalvikvm -Xmx256m \ - -Djava.io.tmpdir=@TERMUX_PREFIX@/tmp \ - -cp @TERMUX_PREFIX@/share/dex/jack.jar com.android.jack.Main \ - -cp @TERMUX_PREFIX@/share/jack/android.jack \ - -D jack.library.digest.algo=MD5 -D sched.vfs.case-insensitive.algo=MD5 \ - -D jack.annotation-processor=off \ - --output-dex=`pwd` \ - $@ +exec dalvikvm -Xmx256m \ +-Djava.io.tmpdir=@TERMUX_PREFIX@/tmp \ +-cp @TERMUX_PREFIX@/share/dex/jack.jar com.android.jack.Main \ +-cp @TERMUX_PREFIX@/share/jack/android.jack \ +-D jack.library.digest.algo=MD5 -D sched.vfs.case-insensitive.algo=MD5 \ +-D jack.annotation-processor=off \ +--output-dex=`pwd` \ +$@ diff --git a/packages/termux-api/build.sh b/packages/termux-api/build.sh index 287423d4..73060d0a 100644 --- a/packages/termux-api/build.sh +++ b/packages/termux-api/build.sh @@ -1,6 +1,6 @@ TERMUX_PKG_HOMEPAGE=http://termux.com/add-ons/api/ TERMUX_PKG_DESCRIPTION="Termux API commands" -TERMUX_PKG_VERSION=0.13 +TERMUX_PKG_VERSION=0.14 termux_step_make_install () { mkdir -p $TERMUX_PREFIX/bin diff --git a/packages/termux-api/termux-api.c b/packages/termux-api/termux-api.c index f1eaa711..ca51755c 100644 --- a/packages/termux-api/termux-api.c +++ b/packages/termux-api/termux-api.c @@ -32,12 +32,6 @@ void exec_am_broadcast(int argc, char** argv, char* input_address_string, char* // Close stdin: close(STDIN_FILENO); - char const* const file = "/system/bin/am"; - // Avoid the system am binary from linking to wrong libraries: - unsetenv("LD_LIBRARY_PATH"); - // Ensure /system/bin/app_process is in path, which is needed by am in some systems: - putenv("PATH=/system/bin"); - // The user is calculated from the uid in android.os.UserHandle#getUserId(int uid) as "uid / 100000", so we do the same: uid_t current_uid = getuid(); int android_user_id = current_uid / 100000; @@ -73,7 +67,10 @@ void exec_am_broadcast(int argc, char** argv, char* input_address_string, char* // End with NULL: child_argv[argc + extra_args] = NULL; - execv(file, child_argv); + // Use an a executable taking care of PATH and LD_LIBRARY_PATH: + char const* const am_executable = "/data/data/com.termux/files/usr/bin/am"; + execv(am_executable, child_argv); + perror("execv(\"/system/bin/am\")"); exit(1); } diff --git a/packages/termux-tools/build.sh b/packages/termux-tools/build.sh index a171bf8d..a44d77cf 100644 --- a/packages/termux-tools/build.sh +++ b/packages/termux-tools/build.sh @@ -1,21 +1,27 @@ TERMUX_PKG_HOMEPAGE=http://termux.com/ TERMUX_PKG_DESCRIPTION="Some tools for Termux" -TERMUX_PKG_VERSION=0.24 +TERMUX_PKG_VERSION=0.25 termux_step_make_install () { $CXX $CFLAGS $LDFLAGS -std=c++14 -Wall -Wextra -pedantic -Werror $TERMUX_PKG_BUILDER_DIR/*.cpp -o $TERMUX_PREFIX/bin/termux-elf-cleaner # Remove LD_LIBRARY_PATH from environment to avoid conflicting # with system libraries that am may link against. - for tool in am dalvikvm df getprop logcat ping ping6 ip pm; do + for tool in am dalvikvm df getprop logcat ping ping6 ip pm settings; do WRAPPER_FILE=$TERMUX_PREFIX/bin/$tool echo '#!/bin/sh' > $WRAPPER_FILE - if [ $tool = am -o $tool = pm ]; then - # These tools require having /system/bin/app_process in the PATH, - # at least on a Nexus 6p running Android 6.0. - echo -n 'PATH=$PATH:/system/bin ' >> $WRAPPER_FILE + + # Some of these tools (am,dalvikvm,?) requires LD_LIBRARY_PATH setup on at least some devices: + if [ $tool != getprop ]; then + echo 'if [ -n "`getprop ro.product.cpu.abilist64`" ]; then BITS=64; else BITS=; fi' >> $WRAPPER_FILE + echo -n 'LD_LIBRARY_PATH=/system/lib$BITS ' >> $WRAPPER_FILE fi - echo "LD_LIBRARY_PATH= exec /system/bin/$tool \$@" >> $WRAPPER_FILE + + # Some tools require having /system/bin/app_process in the PATH, + # at least am&pm on a Nexus 6p running Android 6.0: + echo -n 'PATH=$PATH:/system/bin ' >> $WRAPPER_FILE + + echo "exec /system/bin/$tool \$@" >> $WRAPPER_FILE chmod +x $TERMUX_PREFIX/bin/$tool done diff --git a/packages/termux-tools/termux-reload-settings b/packages/termux-tools/termux-reload-settings index 2fbe68d2..0f8e6064 100755 --- a/packages/termux-tools/termux-reload-settings +++ b/packages/termux-tools/termux-reload-settings @@ -9,4 +9,4 @@ if [ "$#" != "0" ]; then exit fi -LD_LIBRARY_PATH= am broadcast --user 0 -a com.termux.app.reload_style com.termux > /dev/null +am broadcast --user 0 -a com.termux.app.reload_style com.termux > /dev/null diff --git a/packages/termux-tools/termux-setup-storage b/packages/termux-tools/termux-setup-storage index f2cf4831..eec7f778 100755 --- a/packages/termux-tools/termux-setup-storage +++ b/packages/termux-tools/termux-setup-storage @@ -7,6 +7,6 @@ if [ "$#" != "0" ]; then exit fi -LD_LIBRARY_PATH= am broadcast --user 0 \ +am broadcast --user 0 \ --es com.termux.app.reload_style storage \ -a com.termux.app.reload_style com.termux > /dev/null -- 2.11.0