W. Dean Bidgood Jr.

11 papers Misc 5Journal 6
YearRankTypeTitle / Venue / Authors
1999 J jnl
J. Am. Medical Informatics Assoc.
W. Dean Bidgood Jr., Bruce E. Bray, Nicolas Brown, Angelo Rossi Mori, Kent A. Spackman, Alan M. Golichowski, Robert H. Jones, Louis Y. Korman, S. Brent Dove, Lloyd Hildebrand, Michael Berg
1999 Misc conf
AMIA
Martin Kernberg, W. Dean Bidgood Jr.
1998 Misc conf
AMIA
Stanley M. Huff, W. Dean Bidgood Jr., James J. Cimino, W. Ed Hammond
1998 J jnl
J. Am. Medical Informatics Assoc.
Stanley M. Huff, Roberto A. Rocha, Clement J. McDonald, Georges J. E. De Moor, Tom Fiers, W. Dean Bidgood Jr., Arden W. Forrey, William G. Francis, Wayne R. Tracy, Dennis Leavelle, Frank Stalling, Brian Griffin, Pat Maloney, Diane Leland, Linda Charles, Kathy Hutchins, John Baenziger
1998 J jnl
J. Digit. Imaging
W. Dean Bidgood Jr., Yasser Alsafadi, M. Tucker, Fred W. Prior, G. Hagan, J. E. Mattison
1997 Misc conf
AMIA
Angelo Rossi Mori, Elena Galeazzi, Fabrizio Consorti, W. Dean Bidgood Jr.
1997 J jnl
Int. J. Digit. Libr.
W. Dean Bidgood Jr., Louis Y. Korman, Alan M. Golichowski, P. Llody Hildebrand, Angelo Rossi Mori, Bruce E. Bray, Nicholas J. G. Brown, Kent A. Spackman, S. Brent Dove, Katherine Schoeffler
1997 Misc conf
AMIA
W. Dean Bidgood Jr.
1997 Misc conf
AMIA
Louis Y. Korman, W. Dean Bidgood Jr.
1997 J jnl
J. Am. Medical Informatics Assoc.
W. Dean Bidgood Jr., Steven C. Horii, Fred W. Prior, Donald E. Van Syckle
1996 J jnl
J. Digit. Imaging
W. Dean Bidgood Jr., Steven C. Horii
redb/extractors/decompiler/apk/library_filter.py
← Index redb/extractors/decompiler/apk/library_filter.py python
"""Package-based library filtering for APK DEX code analysis.

Determines whether a method belongs to a known library/framework package
and should be filtered out of content tables. This is the Android equivalent
of is_lib_or_thunk() in the Binary Ninja pipeline.
"""

import os
from typing import Dict, List


DEFAULT_LIBRARY_PREFIXES = [
    "android.",
    "androidx.",
    "com.google.android.",
    "com.google.firebase.",
    "com.google.gson.",
    "com.google.protobuf.",
    "kotlin.",
    "kotlinx.",
    "org.apache.",
    "com.squareup.",
    "io.reactivex.",
    "org.reactivestreams.",
    "com.facebook.",
    "com.crashlytics.",
    "io.fabric.",
    "org.junit.",
    "org.mockito.",
]


class LibraryFilter:
    """Filters library/framework classes from APK analysis."""

    def __init__(self, prefixes: List[str] = None):
        env_prefixes = os.getenv("APK_LIBRARY_PREFIXES")
        if env_prefixes:
            self._prefixes = [p.strip() for p in env_prefixes.split(",") if p.strip()]
        elif prefixes is not None:
            self._prefixes = prefixes
        else:
            self._prefixes = DEFAULT_LIBRARY_PREFIXES

        # Convert Dalvik-style prefixes to both formats for matching
        self._dot_prefixes = tuple(self._prefixes)

        self._stats = {"library": 0, "user": 0}

    def is_library(self, class_name: str) -> bool:
        """Check if a class belongs to a known library/framework package.

        Accepts both Java dot notation (com.example.Foo) and Dalvik
        descriptor notation (Lcom/example/Foo;).
        """
        # Normalize Dalvik descriptor to dot notation
        normalized = self._normalize_class_name(class_name)

        is_lib = normalized.startswith(self._dot_prefixes)
        if is_lib:
            self._stats["library"] += 1
        else:
            self._stats["user"] += 1
        return is_lib

    def get_filter_stats(self) -> Dict[str, int]:
        """Return counts of filtered vs. retained classes."""
        return dict(self._stats)

    @staticmethod
    def _normalize_class_name(class_name: str) -> str:
        """Convert Dalvik descriptor to dot notation.

        Lcom/example/Foo; -> com.example.Foo
        com.example.Foo -> com.example.Foo
        """
        if class_name.startswith("L") and class_name.endswith(";"):
            return class_name[1:-1].replace("/", ".")
        return class_name.replace("/", ".")