summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dexdump/dexdump_test.cc2
-rw-r--r--dexlayout/dexdiag_test.cc14
-rw-r--r--dexlayout/dexlayout_test.cc4
-rw-r--r--dexlist/dexlist_test.cc3
-rw-r--r--dexoptanalyzer/dexoptanalyzer_test.cc5
-rw-r--r--imgdiag/imgdiag_test.cc17
-rw-r--r--libartbase/base/common_art_test.cc9
-rw-r--r--libartbase/base/common_art_test.h3
-rw-r--r--libartbase/base/file_utils.cc11
-rw-r--r--libartbase/base/file_utils.h3
-rw-r--r--oatdump/oatdump_test.h10
-rw-r--r--profman/profile_assistant_test.cc6
-rw-r--r--runtime/runtime.cc6
-rw-r--r--tools/dexanalyze/dexanalyze_test.cc2
-rw-r--r--tools/hiddenapi/hiddenapi_test.cc5
15 files changed, 45 insertions, 55 deletions
diff --git a/dexdump/dexdump_test.cc b/dexdump/dexdump_test.cc
index a0f5335409..4ddb208a92 100644
--- a/dexdump/dexdump_test.cc
+++ b/dexdump/dexdump_test.cc
@@ -39,7 +39,7 @@ class DexDumpTest : public CommonRuntimeTest {
// Runs test with given arguments.
bool Exec(const std::vector<std::string>& args, std::string* error_msg) {
- std::string file_path = GetTestAndroidRoot() + "/bin/dexdump";
+ std::string file_path = GetAndroidRuntimeBinDir() + "/dexdump";
EXPECT_TRUE(OS::FileExists(file_path.c_str())) << file_path << " should be a valid file path";
std::vector<std::string> exec_argv = { file_path };
exec_argv.insert(exec_argv.end(), args.begin(), args.end());
diff --git a/dexlayout/dexdiag_test.cc b/dexlayout/dexdiag_test.cc
index e220f39f1b..0791e9a563 100644
--- a/dexlayout/dexdiag_test.cc
+++ b/dexlayout/dexdiag_test.cc
@@ -39,18 +39,14 @@ class DexDiagTest : public CommonArtTest {
// Path to the dexdiag(d?)[32|64] binary.
std::string GetDexDiagFilePath() {
- std::string root = GetTestAndroidRoot();
-
- root += "/bin/";
- root += kDexDiagBinaryName;
-
- std::string root32 = root + "32";
+ std::string path = GetAndroidRuntimeBinDir() + '/' + kDexDiagBinaryName;
+ std::string path32 = path + "32";
// If we have both a 32-bit and a 64-bit build, the 32-bit file will have a 32 suffix.
- if (OS::FileExists(root32.c_str()) && !Is64BitInstructionSet(kRuntimeISA)) {
- return root32;
+ if (OS::FileExists(path32.c_str()) && !Is64BitInstructionSet(kRuntimeISA)) {
+ return path32;
} else {
// This is a 64-bit build or only a single build exists.
- return root;
+ return path;
}
}
diff --git a/dexlayout/dexlayout_test.cc b/dexlayout/dexlayout_test.cc
index fb1c8461e8..5ee63b5feb 100644
--- a/dexlayout/dexlayout_test.cc
+++ b/dexlayout/dexlayout_test.cc
@@ -253,14 +253,14 @@ static void WriteFileBase64(const char* base64, const char* location) {
class DexLayoutTest : public CommonArtTest {
protected:
std::string GetDexLayoutPath() {
- return GetTestAndroidRoot() + "/bin/dexlayoutd";
+ return GetAndroidRuntimeBinDir() + "/dexlayoutd";
}
// Runs FullPlainOutput test.
bool FullPlainOutputExec(std::string* error_msg) {
ScratchFile dexdump_output;
const std::string& dexdump_filename = dexdump_output.GetFilename();
- std::string dexdump = GetTestAndroidRoot() + "/bin/dexdump";
+ std::string dexdump = GetAndroidRuntimeBinDir() + "/dexdump";
EXPECT_TRUE(OS::FileExists(dexdump.c_str())) << dexdump << " should be a valid file path";
ScratchFile dexlayout_output;
diff --git a/dexlist/dexlist_test.cc b/dexlist/dexlist_test.cc
index 39e5f8cd99..32bc735487 100644
--- a/dexlist/dexlist_test.cc
+++ b/dexlist/dexlist_test.cc
@@ -41,8 +41,7 @@ class DexListTest : public CommonRuntimeTest {
// Runs test with given arguments.
bool Exec(const std::vector<std::string>& args, std::string* error_msg) {
- std::string file_path = GetTestAndroidRoot();
- file_path += "/bin/dexlist";
+ std::string file_path = GetAndroidRuntimeBinDir() + "/dexlist";
EXPECT_TRUE(OS::FileExists(file_path.c_str())) << file_path << " should be a valid file path";
std::vector<std::string> exec_argv = { file_path };
exec_argv.insert(exec_argv.end(), args.begin(), args.end());
diff --git a/dexoptanalyzer/dexoptanalyzer_test.cc b/dexoptanalyzer/dexoptanalyzer_test.cc
index 7b6b36c133..9f8dbd7b0e 100644
--- a/dexoptanalyzer/dexoptanalyzer_test.cc
+++ b/dexoptanalyzer/dexoptanalyzer_test.cc
@@ -25,10 +25,9 @@ namespace art {
class DexoptAnalyzerTest : public DexoptTest {
protected:
std::string GetDexoptAnalyzerCmd() {
- std::string file_path = GetTestAndroidRoot();
- file_path += "/bin/dexoptanalyzer";
+ std::string file_path = GetAndroidRuntimeBinDir() + "/dexoptanalyzer";
if (kIsDebugBuild) {
- file_path += "d";
+ file_path += 'd';
}
EXPECT_TRUE(OS::FileExists(file_path.c_str())) << file_path << " should be a valid file path";
return file_path;
diff --git a/imgdiag/imgdiag_test.cc b/imgdiag/imgdiag_test.cc
index 739d9b8329..426f9efd34 100644
--- a/imgdiag/imgdiag_test.cc
+++ b/imgdiag/imgdiag_test.cc
@@ -61,22 +61,17 @@ class ImgDiagTest : public CommonRuntimeTest {
// Path to the imgdiag(d?)[32|64] binary.
std::string GetImgDiagFilePath() {
- std::string root = GetTestAndroidRoot();
-
- root += "/bin/";
- root += kImgDiagBinaryName;
-
+ std::string path = GetAndroidRuntimeBinDir() + '/' + kImgDiagBinaryName;
if (kIsDebugBuild) {
- root += "d";
+ path += 'd';
}
-
- std::string root32 = root + "32";
+ std::string path32 = path + "32";
// If we have both a 32-bit and a 64-bit build, the 32-bit file will have a 32 suffix.
- if (OS::FileExists(root32.c_str()) && !Is64BitInstructionSet(kRuntimeISA)) {
- return root32;
+ if (OS::FileExists(path32.c_str()) && !Is64BitInstructionSet(kRuntimeISA)) {
+ return path32;
// Only a single build exists, so the filename never has an extra suffix.
} else {
- return root;
+ return path;
}
}
diff --git a/libartbase/base/common_art_test.cc b/libartbase/base/common_art_test.cc
index 242db428d5..afdb733035 100644
--- a/libartbase/base/common_art_test.cc
+++ b/libartbase/base/common_art_test.cc
@@ -400,15 +400,6 @@ std::string CommonArtTestImpl::GetClassPathOption(const char* option,
return option + android::base::Join(class_path, ':');
}
-std::string CommonArtTestImpl::GetTestAndroidRoot() {
- if (IsHost()) {
- const char* host_dir = getenv("ANDROID_HOST_OUT");
- CHECK(host_dir != nullptr);
- return host_dir;
- }
- return GetAndroidRoot();
-}
-
// Check that for target builds we have ART_TARGET_NATIVETEST_DIR set.
#ifdef ART_TARGET
#ifndef ART_TARGET_NATIVETEST_DIR
diff --git a/libartbase/base/common_art_test.h b/libartbase/base/common_art_test.h
index a1f7cbb107..09264a7cb6 100644
--- a/libartbase/base/common_art_test.h
+++ b/libartbase/base/common_art_test.h
@@ -26,6 +26,7 @@
#include <android-base/logging.h>
+#include "base/file_utils.h"
#include "base/globals.h"
#include "base/mutex.h"
#include "base/os.h"
@@ -184,8 +185,6 @@ class CommonArtTestImpl {
void ClearDirectory(const char* dirpath, bool recursive = true);
- std::string GetTestAndroidRoot();
-
// Open a file (allows reading of framework jars).
std::vector<std::unique_ptr<const DexFile>> OpenDexFiles(const char* filename);
diff --git a/libartbase/base/file_utils.cc b/libartbase/base/file_utils.cc
index 1a1310342c..f2a2d406e6 100644
--- a/libartbase/base/file_utils.cc
+++ b/libartbase/base/file_utils.cc
@@ -271,6 +271,17 @@ std::string GetAndroidRuntimeRoot() {
return ret;
}
+std::string GetAndroidRuntimeBinDir() {
+ // Environment variable `ANDROID_RUNTIME_ROOT` is defined as
+ // `$ANDROID_HOST_OUT/com.android.runtime` on host. However, host ART binaries
+ // are still installed in `$ANDROID_HOST_OUT/bin` (i.e. outside the Android
+ // Runtime Root). The situation is cleaner on target, where
+ // `ANDROID_RUNTIME_ROOT` is `$ANDROID_ROOT/apex/com.android.runtime` and ART
+ // binaries are installed in `$ANDROID_ROOT/apex/com.android.runtime/bin`.
+ std::string android_runtime_root = kIsTargetBuild ? GetAndroidRuntimeRoot() : GetAndroidRoot();
+ return android_runtime_root + "/bin";
+}
+
std::string GetAndroidDataSafe(std::string* error_msg) {
const char* android_dir = GetAndroidDirSafe(kAndroidDataEnvVar,
kAndroidDataDefaultPath,
diff --git a/libartbase/base/file_utils.h b/libartbase/base/file_utils.h
index 2115e954f8..7e97ab0b9e 100644
--- a/libartbase/base/file_utils.h
+++ b/libartbase/base/file_utils.h
@@ -54,6 +54,9 @@ std::string GetAndroidRuntimeRoot();
// Find $ANDROID_RUNTIME_ROOT, /apex/com.android.runtime, or return an empty string.
std::string GetAndroidRuntimeRootSafe(/*out*/ std::string* error_msg);
+// Return the path to the directory containing the Android Runtime binaries.
+std::string GetAndroidRuntimeBinDir();
+
// Find $ANDROID_DATA, /data, or abort.
std::string GetAndroidData();
// Find $ANDROID_DATA, /data, or return an empty string.
diff --git a/oatdump/oatdump_test.h b/oatdump/oatdump_test.h
index c4f29677a9..fa416e7a68 100644
--- a/oatdump/oatdump_test.h
+++ b/oatdump/oatdump_test.h
@@ -72,16 +72,14 @@ class OatDumpTest : public CommonRuntimeTest {
// Returns path to the oatdump/dex2oat/dexdump binary.
std::string GetExecutableFilePath(const char* name, bool is_debug, bool is_static) {
- std::string root = GetTestAndroidRoot();
- root += "/bin/";
- root += name;
+ std::string path = GetAndroidRuntimeBinDir() + '/' + name;
if (is_debug) {
- root += "d";
+ path += 'd';
}
if (is_static) {
- root += "s";
+ path += 's';
}
- return root;
+ return path;
}
std::string GetExecutableFilePath(Flavor flavor, const char* name) {
diff --git a/profman/profile_assistant_test.cc b/profman/profile_assistant_test.cc
index e9061515ad..7b57c46df3 100644
--- a/profman/profile_assistant_test.cc
+++ b/profman/profile_assistant_test.cc
@@ -198,13 +198,11 @@ class ProfileAssistantTest : public CommonRuntimeTest {
}
std::string GetProfmanCmd() {
- std::string file_path = GetTestAndroidRoot();
- file_path += "/bin/profman";
+ std::string file_path = GetAndroidRuntimeBinDir() + "/profman";
if (kIsDebugBuild) {
file_path += "d";
}
- EXPECT_TRUE(OS::FileExists(file_path.c_str()))
- << file_path << " should be a valid file path";
+ EXPECT_TRUE(OS::FileExists(file_path.c_str())) << file_path << " should be a valid file path";
return file_path;
}
diff --git a/runtime/runtime.cc b/runtime/runtime.cc
index dd7c21938f..ee7e264558 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -765,8 +765,10 @@ std::string Runtime::GetCompilerExecutable() const {
if (!compiler_executable_.empty()) {
return compiler_executable_;
}
- std::string compiler_executable(GetAndroidRoot());
- compiler_executable += (kIsDebugBuild ? "/bin/dex2oatd" : "/bin/dex2oat");
+ std::string compiler_executable = GetAndroidRuntimeBinDir() + "/dex2oat";
+ if (kIsDebugBuild) {
+ compiler_executable += 'd';
+ }
return compiler_executable;
}
diff --git a/tools/dexanalyze/dexanalyze_test.cc b/tools/dexanalyze/dexanalyze_test.cc
index c6648c09db..3bfbc79b84 100644
--- a/tools/dexanalyze/dexanalyze_test.cc
+++ b/tools/dexanalyze/dexanalyze_test.cc
@@ -22,7 +22,7 @@ namespace art {
class DexAnalyzeTest : public CommonRuntimeTest {
public:
std::string GetDexAnalyzePath() {
- return GetTestAndroidRoot() + "/bin/dexanalyze";
+ return GetAndroidRuntimeBinDir() + "/dexanalyze";
}
void DexAnalyzeExec(const std::vector<std::string>& args, bool expect_success) {
diff --git a/tools/hiddenapi/hiddenapi_test.cc b/tools/hiddenapi/hiddenapi_test.cc
index 9f65a5450c..7c9a95cbfd 100644
--- a/tools/hiddenapi/hiddenapi_test.cc
+++ b/tools/hiddenapi/hiddenapi_test.cc
@@ -31,10 +31,9 @@ namespace art {
class HiddenApiTest : public CommonRuntimeTest {
protected:
std::string GetHiddenApiCmd() {
- std::string file_path = GetTestAndroidRoot();
- file_path += "/bin/hiddenapi";
+ std::string file_path = GetAndroidRuntimeBinDir() + "/hiddenapi";
if (kIsDebugBuild) {
- file_path += "d";
+ file_path += 'd';
}
if (!OS::FileExists(file_path.c_str())) {
LOG(FATAL) << "Could not find binary " << file_path;