Xiaochun Li

31 papers A* 1A 2C 1Misc 2Journal 16Unranked 9
YearRankTypeTitle / Venue / Authors
2025 A conf
ITC
Cao Wang, Shengbo Liu, Ming Cheng, Yindong Xiao, Xiaochun Li, David Keezer
2025 A conf
ITC
Shengbo Liu, Yindong Xiao, Cao Wang, Xiaochun Li, David Keezer
2025 A* conf
AAAI
Ce Zhou, Yilun Liu, Weibin Meng, Shimin Tao, Weinan Tian, Feiyu Yao, Xiaochun Li, Tao Han, Boxing Chen, Hao Yang
2025 J jnl
CoRR
Chunlian Wu, Xiaochun Li
2025 conf
ATS
Cao Wang, Shengbo Liu, Yindong Xiao, Xiaochun Li, David Keezer
2024 conf
CISP-BMEI
Xiaochun Li, Feixu Liu, Qin Li
2020 Misc conf
AMIA
Shaun J. Grannis, Xiaochun Li, Huiping Xu, Toan C. Ong, Michael G. Kahn, Lauren R. Lembcke, Suranga Nath Kasthurirathne
2020 conf
IWSLT
Minghan Wang, Hao Yang, Yao Deng, Ying Qin, Lizhi Lei, Daimeng Wei, Hengchao Shang, Ning Xie, Xiaochun Li, Jiaxian Guo
2019 J jnl
CoRR
Bin Yang, Lin Yang, Xiaochun Li, Wenhan Zhang, Hua Zhou, Yequn Zhang, Yongxiong Ren, Yinbo Shi
2019 conf
MedInfo
Vojtech Huser, Xiaochun Li, Zuoyi Zhang, Sungjae Jung, Rae Woong Park, Juan M. Banda, Hanieh Razzaghi, Ajit Londhe, Karthik Natarajan
2018 J jnl
Quantum Inf. Process.
Xiaoqian Zhang, Jian Weng, Xiaochun Li, Weiqi Luo, Xiaoqing Tan, Tingting Song
2017 J jnl
Remote. Sens.
Fucheng Deng, Xiaorui Zhu, Xiaochun Li, Meng Li
2017 J jnl
Concurr. Comput. Pract. Exp.
Xiaoyong Tang, Xiaochun Li, Zhuojun Fu
2016 J jnl
EURASIP J. Wirel. Commun. Netw.
Qi Zhao, Zhijie Wu, Xiaochun Li
2016 conf
ICIC (3)
Xiaochun Li, Fangqi Li, Ying Guo, Jinchao Huang
2016 J jnl
IEEE Trans Autom. Sci. Eng.
Jianguo Wu, Yong Chen, Shiyu Zhou, Xiaochun Li
2016 J jnl
Wirel. Pers. Commun.
Qi Zhao, Bingqian Wang, Xiaochun Li
2014 J jnl
Technometrics
Qiang Zhou, Junyi Zhou, Michael De Cicco, Shiyu Zhou, Xiaochun Li
2014 J jnl
Wirel. Pers. Commun.
Qi Zhao, Xiaochun Li, Zhijie Wu
2014 Misc conf
AMIA
Marc B. Rosenman, Shahid Khokhar, James Egg, Larry Lemmon, Kinga Szucs, S. Maria E. Finnell, David Shepherd, Jeff Friedlin, Xiaochun Li, Abel N. Kho
2013 J jnl
J. Am. Medical Informatics Assoc.
Jon D. Duke, Xiaochun Li, Paul Richard Dexter
2012 J jnl
PLoS Comput. Biol.
Jon D. Duke, Xu Han, Zhiping Wang, Abhinita Subhadarshini, Shreyas D. Karnik, Xiaochun Li, Stephen D. Hall, Yan Jin, J. Thomas Callaghan, J. Marc Overhage, David A. Flockhart, R. Matthew Strother, Sara K. Quinney, Lang Li
2011 J jnl
J. Am. Medical Informatics Assoc.
Martin Chieng Were, Changyu Shen, William M. Tierney, Joseph J. Mamlin, Paul G. Biondich, Xiaochun Li, Sylvester N. Kimaiyo, Burke W. Mamlin
2010 J jnl
J. Biomed. Informatics
Jon D. Duke, Xiaochun Li, Shaun J. Grannis
2010 conf
BIC-TA
Xiaochun Li, Tiejun Zhou, Xiaoyong Tang, Xiangwen Cai
2007 C conf
CSCWD
Tie Bao, Shufen Liu, Feng Yan, Yaorui Wu, Xiaochun Li, Zhanguo Zhang, Shuying Zhang
2006 J jnl
Comput. Stat. Data Anal.
Xiaochun Li, Ronghui Xu
2003 J jnl
Bioinform.
Ronghui Xu, Xiaochun Li
2002 conf
APCCAS (2)
Shuanghe Zhu, Xiaochun Li
2000 conf
CDC
Xiaochun Li, John E. McInroy, Jerry C. Hamann
2000 conf
AIPR
Xiaochun Li, Fedor Dimov, William Phillips, Lambertus Hesselink, Robert McLeod
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("/", ".")