Kaijian Xu

14 papers C 1Journal 12Unranked 1
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jun Geng, Yuping Wang, Jean-Louis Roujean, Weihua Li, Yichuan Ma, Rui Chen, Anxin Ding, Hailan Jiang, Kaijian Xu, Fei Gao, Zhaofu Wu, Jing-Ming Chen
2025 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Kaijian Xu, Henghui Han, Shuzhou Wang, Ping Zhao, Jun Geng, Hailan Jiang, Anxin Ding
2025 J jnl
IEEE Geosci. Remote. Sens. Lett.
Anxin Ding, Yi Yao, Haoran Song, Jun Geng, Ping Zhao, Peng Peng, Hailan Jiang, Kaijian Xu, Ziti Jiao
2025 J jnl
IEEE Geosci. Remote. Sens. Lett.
Kaijian Xu, Shuzhou Wang, Henghui Han, Ping Zhao, Jun Geng, Yuqi Zhang
2024 J jnl
Remote. Sens.
Anxin Ding, Ziti Jiao, Alexander A. Kokhanovsky, Xiaoning Zhang, Jing Guo, Ping Zhao, Mingming Zhang, Hailan Jiang, Kaijian Xu
2024 C conf
IGARSS
Hailan Jiang, Yi Li, Weihua Li, Anxin Ding, Guangjian Yan, Xihan Mu, Donghui Xie, Feng Yang, Kaijian Xu, Ping Zhao, Jun Geng, Felix Morsdorf
2024 J jnl
IEEE Geosci. Remote. Sens. Lett.
Henghui Han, Kaijian Xu, Zhaoying Zhang, Ping Zhao, Hailan Jiang, Anxin Ding
2021 J jnl
Remote. Sens.
Jun Geng, Gang Yuan, Jing M. Chen, Chunguang Lyu, Lili Tu, Weiliang Fan, Qingjiu Tian, Zhaofu Wu, Tingye Tao, Min Yu, Yongchao Zhu, Jianwei Huang, Kaijian Xu, Jinchao Li, Shaoteng Wang
2021 J jnl
Remote. Sens.
Kaijian Xu, Zhaoying Zhang, Wanwan Yu, Ping Zhao, Jibo Yue, Yaping Deng, Jun Geng
2020 J jnl
Remote. Sens.
Kaijian Xu, Qingjiu Tian, Zhaoying Zhang, Jibo Yue, Chung-Te Chang
2019 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Jibo Yue, Qingjiu Tian, Shaofei Tang, Kaijian Xu, Chengquan Zhou
2019 J jnl
Remote. Sens.
Nianxu Xu, Jia Tian, Qingjiu Tian, Kaijian Xu, Shaofei Tang
2019 J jnl
Remote. Sens.
Jibo Yue, Qingjiu Tian, Xinyu Dong, Kaijian Xu, Chengquan Zhou
2008 conf
AMBI-SYS
Kaijian Xu, Manli Zhu, Daqing Zhang, Tao Gu
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("/", ".")