Weiling Yang

16 papers A 4B 1Journal 9Unranked 2
YearRankTypeTitle / Venue / Authors
2026 J jnl
Discret. Appl. Math.
Xian'an Jin, Tianlong Ma, Weiling Yang, Gang Zhang
2026 J jnl
Discret. Math.
Hongxia Ma, Xian'an Jin, Weiling Yang, Meiqiao Zhang
2025 J jnl
CoRR
Chencheng Deng, Weiling Yang, Jianbin Fang, Dezun Dong
2025 J jnl
Displays
Xiaoqing Pei, Miao Yan, Yifan Liu, Lin Fan, Tao Jiang, Zibo Mi, Lina Liu, Chun Li, Hai Lin, Shasha Li, Weiling Yang, Fanming Zeng, Zhongmin Su
2025 J jnl
IEEE Trans. Computers
Weiling Yang, Pengyu Wang, Jianbin Fang, Dezun Dong, Zhengbin Pang, Runxi He, Peng Zhang, Tao Tang, Chun Huang, Yonggang Che, Jie Ren
2024 J jnl
Adv. Appl. Math.
Tianlong Ma, Xian'an Jin, Weiling Yang
2024 J jnl
J. Comb. Theory A
Xiaxia Guan, Weiling Yang, Xian'an Jin
2024 A conf
ICS
Xiao Fu, Weiling Yang, Dezun Dong, Xing Su
2024 J jnl
IEEE Trans. Parallel Distributed Syst.
Weiling Yang, Jianbin Fang, Dezun Dong, Xing Su, Zheng Wang
2023 B conf
ICPADS
Xiao Fu, Xing Su, Dezun Dong, Weiling Yang
2023 A conf
SC
Pengyu Wang, Weiling Yang, Jianbin Fang, Dezun Dong, Chun Huang, Peng Zhang, Tao Tang, Zheng Wang
2021 A conf
IPDPS
Weiling Yang, Jianbin Fang, Dezun Dong
2021 A conf
SC
Weiling Yang, Jianbin Fang, Dezun Dong, Xing Su, Zheng Wang
2021 conf
ICAIT
Weiling Yang, Zhuang Leng, Xiliang Jiang, Ce Li, Hai Lin, Fanming Zeng, Chun Li, Zhongmin Su
2008 J jnl
Math. Comput.
Weiling Yang, Fuji Zhang
2005 conf
CJCDGCGT
Weiling Yang, Fuji Zhang
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("/", ".")