diff --git a/renderdoc/os/posix/android/android_stringio.cpp b/renderdoc/os/posix/android/android_stringio.cpp index da068c4cf..eb59e74c8 100644 --- a/renderdoc/os/posix/android/android_stringio.cpp +++ b/renderdoc/os/posix/android/android_stringio.cpp @@ -23,6 +23,7 @@ ******************************************************************************/ #include +#include #include #include "os/os_specific.h" @@ -63,15 +64,33 @@ namespace FileIO { const char *GetTempRootPath() { - return "/sdcard"; + static string ret; + GetExecutableFilename(ret); + + // This folder is writable even if the APK does not have manifest write permissions. + ret = "/data/data/" + ret + "/files"; + return ret.c_str(); } +// For RenderDocCmd.apk, this returns "org.renderdoc.renderdoccmd" +// For other APKs, we use it to get the writable temp directory. void GetExecutableFilename(string &selfName) { - char path[512] = {0}; - readlink("/proc/self/exe", path, 511); + char buf[4096]; + snprintf(buf, sizeof(buf), "/proc/%u/cmdline", getpid()); + int fd = open(buf, O_RDONLY); + if(fd < 0) + { + return; + } + ssize_t len = read(fd, buf, sizeof(buf)); + close(fd); + if(len < 0 || len == sizeof(buf)) + { + return; + } - selfName = string(path); + selfName = buf; } }; diff --git a/renderdoc/os/posix/posix_libentry.cpp b/renderdoc/os/posix/posix_libentry.cpp index 8978d2377..6313fd36b 100644 --- a/renderdoc/os/posix/posix_libentry.cpp +++ b/renderdoc/os/posix/posix_libentry.cpp @@ -44,7 +44,7 @@ void library_loaded() if(curfile.find("/renderdoccmd") != string::npos || curfile.find("/renderdocui") != string::npos || curfile.find("/qrenderdoc") != string::npos || - curfile.find("/system/bin/app_process") != string::npos) + curfile.find("org.renderdoc.renderdoccmd") != string::npos) { RDCDEBUG("Not creating hooks - in replay app");