diff options
Diffstat (limited to 'tools/hiddenapi/hiddenapi_test.cc')
-rw-r--r-- | tools/hiddenapi/hiddenapi_test.cc | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/tools/hiddenapi/hiddenapi_test.cc b/tools/hiddenapi/hiddenapi_test.cc index 799546e07b..cdf797e598 100644 --- a/tools/hiddenapi/hiddenapi_test.cc +++ b/tools/hiddenapi/hiddenapi_test.cc @@ -47,6 +47,7 @@ class HiddenApiTest : public CommonRuntimeTest { const std::vector<std::string>& extra_args, ScratchFile* out_dex) { std::string error; + ScratchFile in_dex; std::unique_ptr<ZipArchive> jar( ZipArchive::Open(GetTestDexFileName("HiddenApi").c_str(), &error)); if (jar == nullptr) { @@ -58,7 +59,7 @@ class HiddenApiTest : public CommonRuntimeTest { LOG(FATAL) << "Could not find classes.dex in test file " << GetTestDexFileName("HiddenApi") << ": " << error; UNREACHABLE(); - } else if (!jar_classes_dex->ExtractToFile(*out_dex->GetFile(), &error)) { + } else if (!jar_classes_dex->ExtractToFile(*in_dex.GetFile(), &error)) { LOG(FATAL) << "Could not extract classes.dex from test file " << GetTestDexFileName("HiddenApi") << ": " << error; UNREACHABLE(); @@ -68,7 +69,8 @@ class HiddenApiTest : public CommonRuntimeTest { argv_str.push_back(GetHiddenApiCmd()); argv_str.insert(argv_str.end(), extra_args.begin(), extra_args.end()); argv_str.push_back("encode"); - argv_str.push_back("--dex=" + out_dex->GetFilename()); + argv_str.push_back("--input-dex=" + in_dex.GetFilename()); + argv_str.push_back("--output-dex=" + out_dex->GetFilename()); argv_str.push_back("--light-greylist=" + light_greylist.GetFilename()); argv_str.push_back("--dark-greylist=" + dark_greylist.GetFilename()); argv_str.push_back("--blacklist=" + blacklist.GetFilename()); @@ -92,7 +94,7 @@ class HiddenApiTest : public CommonRuntimeTest { } std::unique_ptr<const DexFile> dex_file(dex_loader.OpenDex( - fd.Release(), /* location= */ file.GetFilename(), /* verify= */ false, + fd.Release(), /* location= */ file.GetFilename(), /* verify= */ true, /* verify_checksum= */ true, /* mmap_shared= */ false, &error_msg)); if (dex_file.get() == nullptr) { LOG(FATAL) << "Open failed for '" << file.GetFilename() << "' " << error_msg; @@ -126,16 +128,20 @@ class HiddenApiTest : public CommonRuntimeTest { uint32_t expected_visibility, const DexFile::ClassDef& class_def, const DexFile& dex_file) { - ClassAccessor accessor(dex_file, class_def); + ClassAccessor accessor(dex_file, class_def, /* parse hiddenapi flags */ true); CHECK(accessor.HasClassData()) << "Class " << accessor.GetDescriptor() << " has no data"; + if (!accessor.HasHiddenapiClassData()) { + return HiddenApiAccessFlags::kWhitelist; + } + for (const ClassAccessor::Field& field : accessor.GetFields()) { const DexFile::FieldId& fid = dex_file.GetFieldId(field.GetIndex()); if (strcmp(name, dex_file.GetFieldName(fid)) == 0) { const uint32_t actual_visibility = field.GetAccessFlags() & kAccVisibilityFlags; CHECK_EQ(actual_visibility, expected_visibility) << "Field " << name << " in class " << accessor.GetDescriptor(); - return field.DecodeHiddenAccessFlags(); + return static_cast<HiddenApiAccessFlags::ApiList>(field.GetHiddenapiFlags()); } } @@ -149,9 +155,13 @@ class HiddenApiTest : public CommonRuntimeTest { bool expected_native, const DexFile::ClassDef& class_def, const DexFile& dex_file) { - ClassAccessor accessor(dex_file, class_def); + ClassAccessor accessor(dex_file, class_def, /* parse hiddenapi flags */ true); CHECK(accessor.HasClassData()) << "Class " << accessor.GetDescriptor() << " has no data"; + if (!accessor.HasHiddenapiClassData()) { + return HiddenApiAccessFlags::kWhitelist; + } + for (const ClassAccessor::Method& method : accessor.GetMethods()) { const DexFile::MethodId& mid = dex_file.GetMethodId(method.GetIndex()); if (strcmp(name, dex_file.GetMethodName(mid)) == 0) { @@ -160,7 +170,7 @@ class HiddenApiTest : public CommonRuntimeTest { const uint32_t actual_visibility = method.GetAccessFlags() & kAccVisibilityFlags; CHECK_EQ(actual_visibility, expected_visibility) << "Method " << name << " in class " << accessor.GetDescriptor(); - return method.DecodeHiddenAccessFlags(); + return static_cast<HiddenApiAccessFlags::ApiList>(method.GetHiddenapiFlags()); } } |