Weijian Zhang

75 papers A* 5A 2B 1C 3Journal 52Unranked 12
YearRankTypeTitle / Venue / Authors
2026 J jnl
Electron. Commer. Res. Appl.
Weijian Zhang, Min Kong, Weimin Tan, Yingxin Song, Amir M. Fathollahi-Fard
2026 J jnl
IEEE Trans. Intell. Transp. Syst.
Weijian Zhang, Zhizhong Zhang, Xin Tan, Yanyun Qu, Lizhuang Ma, Yuan Xie
2026 J jnl
Biomed. Signal Process. Control.
Jian Li, Jiawei Wang, Fengwu Lin, Wenqi Wu, Weijian Zhang, Zhao-Min Chen, Ali Asghar Heidari, Huiling Chen
2025 J jnl
Swarm Evol. Comput.
Weijian Zhang, Min Kong, Yajing Zhang, Amir M. Fathollahi-Fard, Guangdong Tian
2025 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Junwei Zhou, Zhuang Ye, Xiangbo Yi, Weijian Zhang, Qiuzhen Lin, Jianwen Xiang
2025 J jnl
Adv. Intell. Syst.
Weijian Zhang, Zikang Li, Lap-Mou Tam, Qingsong Xu
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Weijian Zhang, Zikang Li, Xianli Wang, Yonghao Huang, Junan Li, Lap-Mou Tam, Qingsong Xu
2025 J jnl
IEEE Robotics Autom. Lett.
Yuan Yin, Zikang Li, Weijian Zhang, Yechen Zhang, Qingsong Xu
2025 conf
ROBIO
Rungeng Zhang, Zehao Wu, Weijian Zhang, Qingsong Xu
2025 J jnl
IEEE Robotics Autom. Lett.
Zikang Li, Weijian Zhang, Yonghao Huang, Yuan Yin, Qingsong Xu
2025 A* conf
ICRA
Zikang Li, Weijian Zhang, Zehao Wu, Qingsong Xu
2025 J jnl
Inf. Technol. Control.
Fengwu Zhu, Weijian Zhang, Qinglai Zhao, Xianzhang Meng, Chunkai Zhao, Weizhi Feng
2025 J jnl
CoRR
Hashan K. Weerasooriya, Prateek Chennuri, Weijian Zhang, István Gyöngy, Stanley H. Chan
2025 A conf
ICME
Weijian Zhang, Zhiwei Zhang, Tianfang Sun, Zhizhong Zhang, Xin Tan, Yuan Xie
2025 A* conf
ICRA
Weijian Zhang, Charlie Street, Masoumeh Mansouri
2025 A* conf
ACM Multimedia
Zhiwei Zhang, Ruikai Xu, Weijian Zhang, Zhizhong Zhang, Xin Tan, Jingyu Gong, Yuan Xie, Lizhuang Ma
2025 J jnl
CoRR
Zhiwei Zhang, Ruikai Xu, Weijian Zhang, Zhizhong Zhang, Xin Tan, Jingyu Gong, Yuan Xie, Lizhuang Ma
2025 J jnl
Eng. Appl. Artif. Intell.
Zhuang Zhao, Ye Wang, Weijian Zhang, Zhenggang Ba, Lin Sun
2025 J jnl
IEEE Trans Autom. Sci. Eng.
Zikang Li, Weijian Zhang, Yonghao Huang, Lap-Mou Tam, Qingsong Xu
2025 A conf
IROS
Weijian Zhang, Charlie Street, Masoumeh Mansouri
2025 J jnl
J. Electronic Imaging
Weijian Zhang, Jingyu Ye, Zhenjun Tang, Hanzhou Wu, Deyang Wu
2024 J jnl
Robotics Auton. Syst.
Weijian Zhang, Charlie Street, Masoumeh Mansouri
2024 conf
BigCom
Weijian Zhang, Xing Guo, Haohua Du
2024 conf
CIPAE
Jiaju Ding, Zishuo Guo, Weijian Zhang
2024 C conf
MMSP
William C. Yau, Weijian Zhang, Hashan Kavinga Weerasooriya, Stanley H. Chan
2024 J jnl
CoRR
William C. Yau, Weijian Zhang, Hashan K. Weerasooriya, Stanley H. Chan
2024 J jnl
IEEE Trans. Biomed. Eng.
Jun Liu, Weijian Zhang, Songli Hu, Chaomin Wu, Kangli Dong, Qishun Wei, Guozheng Wang, Jiajia Fang, Delin Zhang, Meijuan Lan, Fengjiang Zhang, Hengqiu Sun
2024 A* conf
ICRA
Weijian Zhang, Jianshu Wang, Yang Yu
2024 J jnl
Remote. Sens.
Zhengwei Liang, Jia Du, Weilin Yu, Kaizeng Zhuo, Kewen Shao, Weijian Zhang, Cangming Zhang, Jie Qin, Yu Han, Bingrun Sui, Kaishan Song
2024 J jnl
Artif. Life Robotics
Weizhi Lu, Qiang Li, Weijian Zhang, Lin Mei, Di Cai, Zepeng Li
2024 conf
ROBIO
Weijian Zhang, Zikang Li, Lap-Mou Tam, Qingsong Xu
2024 J jnl
Int. J. Artif. Intell. Tools
Weijian Zhang, Meiling Feng, Chengyi Xia
2024 J jnl
IEEE Access
Mengran Liu, Weijian Zhang, Cun Wei, Zhenming Bao, Jingjie Hu, Junwei Zhou
2024 J jnl
Image Vis. Comput.
Yixiang Lu, Weijian Zhang, Dawei Zhao, Yucheng Qian, Davydau Maksim, Qingwei Gao
2024 C conf
MMSP
Weijian Zhang, Hashan K. Weerasooriya, Prateek Chennuri, Stanley H. Chan
2024 J jnl
J. Ind. Inf. Integr.
Weijian Zhang, Min Kong, Yajing Zhang, Amir M. Fathollahi-Fard
2024 J jnl
Sensors
Kun Xiao, Fuzhong Hao, Weijian Zhang, Nuannuan Li, Yintao Wang
2024 A* conf
CVPR
Stanley H. Chan, Hashan K. Weerasooriya, Weijian Zhang, Pamela Abshire, István Gyöngy, Robert K. Henderson
2024 J jnl
CoRR
Stanley H. Chan, Hashan K. Weerasooriya, Weijian Zhang, Pamela Abshire, István Gyöngy, Robert K. Henderson
2023 J jnl
Inf. Sci.
Zaoli Yang, Weijian Zhang, Chunjia Han, Yuchen Li, Mu Yang, Petros Ieromonachou
2023 J jnl
Swarm Evol. Comput.
Wei Fang, Weijian Zhang, Li Ma, Yunlin Wu, Kefei Yan, Hengyang Lu, Jun Sun, Xiaojun Wu, Bo Yuan
2023 J jnl
Remote. Sens.
Dapeng Jiang, Jia Du, Kaishan Song, Boyu Zhao, Yiwei Zhang, Weijian Zhang
2023 J jnl
IEEE Access
Xiangying Xu, Hongjiang Wang, Minmin Miao, Weijian Zhang, Yonglong Zhang, Haibo Dai, Zijian Zheng, Xiaoxiang Zhang
2023 J jnl
Remote. Sens.
Jian Li, Hua Liu, Jia Du, Bin Cao, Yiwei Zhang, Weilin Yu, Weijian Zhang, Zhi Zheng, Yan Wang, Yue Sun, Yuanhui Chen
2023 J jnl
J. Theor. Appl. Electron. Commer. Res.
Yuxuan Kang, Xianliang Shi, Xiongping Yue, Weijian Zhang, Samuel Shuai Liu
2023 J jnl
Remote. Sens.
Jian Li, Weilin Yu, Jia Du, Kaishan Song, Xiaoyun Xiang, Hua Liu, Yiwei Zhang, Weijian Zhang, Zhi Zheng, Yan Wang, Yue Sun
2023 conf
ECMR
Weijian Zhang, Charlie Street, Masoumeh Mansouri
2023 J jnl
Eur. J. Oper. Res.
Weijian Zhang, Xianliang Shi, Anqiang Huang, Guowei Hua, Ruud H. Teunter
2023 conf
DSC
Kun Xiao, Fuzhong Hao, Weijian Zhang, Nuannuan Li, Haiyan Zhi, Yintao Wang
2022 conf
ICITEE
Min Xu, Xinhe Chen, Zhimin Guo, Lin Peng, Weijian Zhang
2022 J jnl
Signal Process.
Jinfeng Hu, Weijian Zhang, Haoming Zhu, Kai Zhong, Weijie Xiong, Zhiyong Wei, Yuzhi Li
2022 J jnl
IEEE Trans. Cogn. Dev. Syst.
Weijian Zhang, Peng Song, Dongliang Chen, Chao Sheng, Wenjing Zhang
2022 J jnl
Appl. Math. Comput.
Weijian Zhang, Haibo Du, Zhaobi Chu
2022 J jnl
Intell. Autom. Soft Comput.
Weijian Zhang, Hao Wang, Hao Hua, Qirun Wang
2022 J jnl
Comput. Syst. Sci. Eng.
Hao Yan, Yanan Liu, Shuo Qiu, Shengzhou Hu, Weijian Zhang, Jinyue Xia
2021 J jnl
Wirel. Commun. Mob. Comput.
Weijian Zhang, Zhimin Guo, Nuannuan Li, Mingyan Li, Qing Fan, Min Luo
2021 C conf
CSCWD
Xinhao Zheng, Lin Li, Weijian Zhang
2021 J jnl
Digit. Signal Process.
Weijian Zhang, Jinfeng Hu, Qihang Zhou, Weijie Xiong, Bozhou Zhang
2021 conf
CCBR
Keke Zhao, Peng Song, Wenjing Zhang, Weijian Zhang, Shaokai Li, Dongliang Chen, Wenming Zheng
2021 J jnl
Digit. Signal Process.
Chao Sheng, Peng Song, Weijian Zhang, Dongliang Chen
2021 J jnl
Digit. Signal Process.
Wenjing Zhang, Peng Song, Dongliang Chen, Weijian Zhang
2020 conf
SpaCCS Workshops
Weijian Zhang, Chao Lin, Zhuo Lyu, Chen Cen, Min Luo
2020 J jnl
Signal Process.
Weijian Zhang, Jinfeng Hu, Zhiyong Wei, Hong Ma, Xianxiang Yu, Huiyong Li
2020 B conf
CEC
Weijian Zhang, Wei Fang, Jun Sun, Qidong Chen
2020 J jnl
Complex.
Jian Li, Weijian Zhang, Yating Hu, Zhun Wang
2020 J jnl
IEICE Trans. Inf. Syst.
Dongliang Chen, Peng Song, Wenjing Zhang, Weijian Zhang, Bingui Xu, Xuan Zhou
2020 J jnl
IEEE ACM Trans. Audio Speech Lang. Process.
Weijian Zhang, Peng Song
2018 conf
WWW (Companion Volume)
Weijian Zhang, Jonathan Deakin, Nicholas J. Higham, Shuaiqiang Wang
2018 J jnl
CoRR
Weijian Zhang, Jonathan Deakin, Nicholas J. Higham, Shuaiqiang Wang
2016 J jnl
PeerJ Comput. Sci.
Weijian Zhang, Nicholas J. Higham
2016 conf
IPDPS Workshops
Jiahao Chen, Weijian Zhang
2016 J jnl
CoRR
Jiahao Chen, Weijian Zhang
2014 conf
FSKD
Hai Wei, Xiaohui Lin, Xirong Xu, Lishuang Li, Weijian Zhang, Xiaomei Wang
1994 J jnl
IEEE Trans. Autom. Control.
Weijian Zhang
1987 J jnl
IEEE Trans. Commun.
Weijian Zhang
redb/extractors/decompiler/apk/jadx_wrapper.py
← Index redb/extractors/decompiler/apk/jadx_wrapper.py python
"""JADX decompiler subprocess wrapper.

Manages JADX subprocess execution for Java decompilation,
following the CAPA extractor subprocess pattern.
"""

import os
import re
import signal
import subprocess
from typing import Dict, Optional


class JADXDecompiler:
    """Subprocess wrapper for JADX Java decompilation."""

    def __init__(self, jadx_path: str = None, timeout: int = None, log=None):
        self.jadx_path = jadx_path or os.getenv("JADX_PATH", "jadx")
        self.timeout = timeout or int(os.getenv("JADX_TIMEOUT", "300"))
        self.log = log

    def decompile(self, apk_path: str, output_dir: str) -> bool:
        """Run JADX decompilation on an APK file.

        Returns True on success, False on failure.
        """
        cmd = [
            self.jadx_path,
            "--no-res",
            "--no-imports",
            "--threads-count", "2",
            "--output-dir", output_dir,
            apk_path,
        ]

        try:
            process = subprocess.Popen(
                cmd,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
                preexec_fn=os.setsid,
            )

            try:
                stdout, stderr = process.communicate(timeout=self.timeout)
                if process.returncode != 0:
                    if self.log:
                        self.log.warning(
                            f"JADX returned non-zero exit code {process.returncode}: "
                            f"{stderr[:500] if stderr else 'no stderr'}"
                        )
                    # JADX may still produce partial output on non-zero exit
                    return os.path.isdir(os.path.join(output_dir, "sources"))
                return True

            except subprocess.TimeoutExpired:
                if self.log:
                    self.log.error(
                        f"JADX timed out after {self.timeout}s"
                    )
                # Kill the process group
                try:
                    os.killpg(os.getpgid(process.pid), signal.SIGTERM)
                    process.wait(timeout=3)
                except (ProcessLookupError, subprocess.TimeoutExpired):
                    try:
                        os.killpg(os.getpgid(process.pid), signal.SIGKILL)
                    except ProcessLookupError:
                        pass
                return False

        except FileNotFoundError:
            if self.log:
                self.log.error(
                    f"JADX not found at '{self.jadx_path}'. "
                    "Install JADX or set JADX_PATH env var."
                )
            return False
        except Exception as e:
            if self.log:
                self.log.error(f"JADX execution error: {e}")
            return False

    def parse_java_methods(self, output_dir: str) -> Dict[str, str]:
        """Parse JADX output into per-method Java source.

        Returns dict keyed by 'package.ClassName.methodName(ParamType1, ParamType2)'.
        """
        sources_dir = os.path.join(output_dir, "sources")
        if not os.path.isdir(sources_dir):
            return {}

        methods = {}
        for root, _dirs, files in os.walk(sources_dir):
            for fname in files:
                if not fname.endswith(".java"):
                    continue
                fpath = os.path.join(root, fname)
                try:
                    with open(fpath, "r", encoding="utf-8", errors="replace") as f:
                        content = f.read()

                    # Derive the fully qualified class name from file path
                    rel_path = os.path.relpath(fpath, sources_dir)
                    class_fqn = rel_path.replace(os.sep, ".").replace("/", ".")
                    if class_fqn.endswith(".java"):
                        class_fqn = class_fqn[:-5]

                    file_methods = self._extract_methods_from_java(
                        content, class_fqn
                    )
                    methods.update(file_methods)

                except Exception:
                    continue

        return methods

    def _extract_methods_from_java(
        self, source: str, class_fqn: str
    ) -> Dict[str, str]:
        """Extract individual methods from a Java source file.

        Uses brace-depth tracking to find method boundaries.
        """
        methods = {}
        lines = source.split("\n")
        i = 0

        while i < len(lines):
            line = lines[i]
            match = self._is_method_declaration(line)
            if match:
                method_name, param_types = match
                # Track brace depth to find method end
                start_line = i
                brace_depth = 0
                found_open = False

                for j in range(i, len(lines)):
                    for ch in lines[j]:
                        if ch == "{":
                            brace_depth += 1
                            found_open = True
                        elif ch == "}":
                            brace_depth -= 1

                    if found_open and brace_depth == 0:
                        method_body = "\n".join(lines[start_line : j + 1])
                        key = f"{class_fqn}.{method_name}({param_types})"
                        methods[key] = method_body
                        i = j + 1
                        break
                else:
                    i += 1
            else:
                i += 1

        return methods

    # Regex for method declarations (not constructors, not class/interface decl)
    _METHOD_DECL_RE = re.compile(
        r"^\s*(?:(?:public|private|protected|static|final|synchronized|"
        r"native|abstract|strictfp)\s+)*"
        r"(?:[\w<>\[\]?.]+\s+)"  # return type
        r"(\w+)"  # method name
        r"\s*\(([^)]*)\)"  # parameters
        r"(?:\s*throws\s+[\w.,\s]+)?"
        r"\s*\{"
    )

    def _is_method_declaration(self, line: str) -> Optional[tuple]:
        """Check if a line is a method declaration.

        Returns (method_name, param_types_str) or None.
        """
        m = self._METHOD_DECL_RE.match(line)
        if not m:
            return None

        method_name = m.group(1)
        params_raw = m.group(2).strip()

        # Skip class-level blocks
        if method_name in ("if", "for", "while", "switch", "try", "catch"):
            return None

        # Extract just the type names from parameters
        if not params_raw:
            return (method_name, "")

        param_types = []
        for param in params_raw.split(","):
            param = param.strip()
            if not param:
                continue
            parts = param.split()
            # Last non-annotation token before the variable name is the type
            # Simple heuristic: type is second-to-last, name is last
            if len(parts) >= 2:
                param_types.append(parts[-2])
            elif len(parts) == 1:
                param_types.append(parts[0])

        return (method_name, ", ".join(param_types))