feat(android): trace callers of external DEX methods (#8154)

Resolve exact external method targets from directly encoded DEX invokes.
Preserve complete caller identity, bounded position evidence and follow-up
selectors. Report aggregate position coverage independently of the caller
inventory, and reuse bounded prototype facts within the exact session.

Absorbs #8096. Fixes #7811.

Co-authored-by: hhang <169027046+xu91102@users.noreply.github.com>
This commit is contained in:
gensokyo-devandhhang authored and GitHub committed 2026-10-31 01:07:18 +08:00
1 parent 675d4076de
commit 0ffed7a48c
20 files changed
+1472 -76

No files matched your search

+15
View File
@@ -4,6 +4,7 @@ import { tmpdir } from "node:os";
import { delimiter, join, resolve } from "node:path";
import { verifyAndroidMethodBodies } from "./method-bodies.mjs";
import { verifyAndroidDirectInvokes } from "./direct-invokes.mjs";
import { verifyAndroidExternalReferences } from "./external-invokes.mjs";
/** Prove cold metadata stays unmaterialized and overload identities survive code generation. */
export const verifyAndroidMetadata = async ({
@@ -48,6 +49,10 @@ export const verifyAndroidMetadata = async ({
repository,
"tests/conformance/android/ReaJadxMetadataRegression.java",
),
resolve(
repository,
"tests/conformance/android/ReaJadxExternalReferencesRegression.java",
),
],
{ timeout: 30_000 },
);
@@ -165,6 +170,16 @@ export const verifyAndroidMetadata = async ({
environment,
execute,
});
await verifyAndroidExternalReferences({
java,
jar,
classes,
repository,
execute,
entrypoint,
environment,
jvmArguments,
});
} finally {
await rm(classes, { recursive: true, force: true });
}