Kang Liao

97 papers A* 16A 3Misc 1Journal 72Unranked 5
YearRankTypeTitle / Venue / Authors
2026 A* conf
AAAI
Wenbo Nie, Lang Nie, Chunyu Lin, Jingwen Chen, Ke Xing, Jiyuan Wang, Kang Liao
2026 J jnl
CoRR
Jiyuan Wang, Chunyu Lin, Lei Sun, Zhi Cao, YuYang Yin, Lang Nie, Zhenlong Yuan, Xiangxiang Chu, Yunchao Wei, Kang Liao, Guosheng Lin
2026 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Zhijie Shen, Chunyu Lin, Lang Nie, Kang Liao, Weisi Lin, Yao Zhao
2026 J jnl
CoRR
Yuan Mei, Lang Nie, Kang Liao, Yunqiu Xu, Chunyu Lin, Bin Xiao
2026 J jnl
CoRR
Xiao-Ming Wu, Bin Fan, Kang Liao, Jian-Jian Jiang, Runze Yang, Yihang Luo, Zhonghua Wu, Wei-Shi Zheng, Chen Change Loy
2025 A* conf
CVPR
Zongsheng Yue, Kang Liao, Chen Change Loy
2025 A* conf
ICLR
Kang Liao, Zongsheng Yue, Zhouxia Wang, Chen Change Loy
2025 J jnl
ACM Trans. Multim. Comput. Commun. Appl.
Shangrong Yang, Chunyu Lin, Kang Liao, Yao Zhao
2025 J jnl
CoRR
Jiyuan Wang, Chunyu Lin, Lei Sun, Rongying Liu, Lang Nie, Mingxing Li, Kang Liao, Xiangxiang Chu, Yao Zhao
2025 J jnl
CoRR
Jiyuan Wang, Chunyu Lin, Cheng Guan, Lang Nie, Jing He, Haodong Li, Kang Liao, Yao Zhao
2025 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Kang Liao, Zongsheng Yue, Zhonghua Wu, Chen Change Loy
2025 J jnl
CoRR
Yikai Wang, Zhouxia Wang, Zhonghua Wu, Qingyi Tao, Kang Liao, Chen Change Loy
2025 J jnl
CoRR
Lang Nie, Yuan Mei, Kang Liao, Yunqiu Xu, Chunyu Lin, Bin Xiao
2025 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Junsong Zhang, Zisong Chen, Chunyu Lin, Zhijie Shen, Lang Nie, Kang Liao, Yao Zhao
2025 J jnl
CoRR
Junsong Zhang, Chunyu Lin, Zhijie Shen, Lang Nie, Kang Liao, Yao Zhao
2025 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Lang Nie, Chunyu Lin, Kang Liao, Yun Zhang, Shuaicheng Liu, Yao Zhao
2025 J jnl
CoRR
Lang Nie, Chunyu Lin, Kang Liao, Yun Zhang, Shuaicheng Liu, Yao Zhao
2025 J jnl
CoRR
Kang Liao, Size Wu, Zhonghua Wu, Linyi Jin, Chao Wang, Yikai Wang, Fei Wang, Wei Li, Chen Change Loy
2025 J jnl
CoRR
Zhijie Shen, Chunyu Lin, Shujuan Huang, Lang Nie, Kang Liao, Yao Zhao
2024 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Zhijie Shen, Chunyu Lin, Junsong Zhang, Lang Nie, Kang Liao, Yao Zhao
2024 J jnl
CoRR
Zongsheng Yue, Kang Liao, Chen Change Loy
2024 J jnl
IEEE Trans. Image Process.
Kang Liao, Xiangyu Xu, Chunyu Lin, Wenqi Ren, Yunchao Wei, Yao Zhao
2024 J jnl
CoRR
Kang Liao, Zongsheng Yue, Zhouxia Wang, Chen Change Loy
2024 A* conf
ACM Multimedia
Jiyuan Wang, Chunyu Lin, Lang Nie, Kang Liao, Shuwei Shao, Yao Zhao
2024 J jnl
CoRR
Jiyuan Wang, Chunyu Lin, Lang Nie, Kang Liao, Shuwei Shao, Yao Zhao
2024 conf
ECCV (4)
Lang Nie, Chunyu Lin, Kang Liao, Yun Zhang, Shuaicheng Liu, Rui Ai, Yao Zhao
2024 J jnl
CoRR
Lang Nie, Chunyu Lin, Kang Liao, Yun Zhang, Shuaicheng Liu, Yao Zhao
2024 J jnl
CoRR
Kang Liao, Zongsheng Yue, Zhonghua Wu, Chen Change Loy
2024 J jnl
CoRR
Zhijie Shen, Chunyu Lin, Lang Nie, Kang Liao
2024 J jnl
CoRR
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2024 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2023 J jnl
CoRR
Zhijie Shen, Chunyu Lin, Junsong Zhang, Lang Nie, Kang Liao, Yao Zhao
2023 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Chunlan Zhang, Chunyu Lin, Kang Liao, Lang Nie, Yao Zhao
2023 A conf
WACV
Zishuo Zheng, Chunyu Lin, Lang Nie, Kang Liao, Zhijie Shen, Yao Zhao
2023 J jnl
CoRR
Kang Liao, Lang Nie, Shujuan Huang, Chunyu Lin, Jing Zhang, Yao Zhao, Moncef Gabbouj, Dacheng Tao
2023 J jnl
IEEE Trans. Image Process.
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2023 A* conf
CVPR
Zhijie Shen, Zishuo Zheng, Chunyu Lin, Lang Nie, Kang Liao, Shuai Zheng, Yao Zhao
2023 J jnl
CoRR
Zhijie Shen, Zishuo Zheng, Chunyu Lin, Lang Nie, Kang Liao, Shuai Zheng, Yao Zhao
2023 J jnl
CoRR
Shangrong Yang, Chunyu Lin, Kang Liao, Yao Zhao
2023 A* conf
ICCV
Shangrong Yang, Chunyu Lin, Kang Liao, Yao Zhao
2023 A* conf
ICRA
Kang Liao, Thibault Tricard, Michal Piovarci, Hans-Peter Seidel, Vahid Babaei
2023 J jnl
CoRR
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Chunlan Zhang, Chunyu Lin, Kang Liao, Shujuan Huang, Yao Zhao
2023 A* conf
ICCV
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2023 J jnl
Eng. Comput.
Kang Liao, Yiping Wu, FaSheng Miao, Yutao Pan, Michael Beer
2023 A* conf
ICCV
Kang Liao, Lang Nie, Chunyu Lin, Zishuo Zheng, Yao Zhao
2023 J jnl
CoRR
Kang Liao, Lang Nie, Chunyu Lin, Zishuo Zheng, Yao Zhao
2023 A* conf
ACM Multimedia
Zisong Chen, Chunyu Lin, Lang Nie, Zhijie Shen, Kang Liao, Yuanzhouhan Cao, Yao Zhao
2023 A* conf
AAAI
Shangrong Yang, Chunyu Lin, Kang Liao, Yao Zhao
2023 J jnl
CoRR
Shangrong Yang, Chunyu Lin, Kang Liao, Yao Zhao
2023 Misc conf
ICASSP
Lei Zhang, Chunyu Lin, Kang Liao, Yao Zhao
2023 A conf
IROS
Zisong Chen, Chunyu Lin, Lang Nie, Kang Liao, Yao Zhao
2023 J jnl
CoRR
Zisong Chen, Chunyu Lin, Lang Nie, Kang Liao, Yao Zhao
2022 J jnl
J. Vis. Commun. Image Represent.
Zishuo Zheng, Chunyu Lin, Lang Nie, Kang Liao, Yao Zhao
2022 J jnl
CoRR
Zishuo Zheng, Chunyu Lin, Lang Nie, Kang Liao, Zhijie Shen, Yao Zhao
2022 J jnl
CoRR
Kang Liao, Xiangyu Xu, Chunyu Lin, Wenqi Ren, Yunchao Wei, Yao Zhao
2022 A* conf
CVPR
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2022 J jnl
CoRR
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2022 J jnl
CoRR
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2022 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2022 J jnl
CoRR
Zhijie Shen, Chunyu Lin, Lang Nie, Kang Liao, Yao Zhao
2022 J jnl
CoRR
Shangrong Yang, Chunyu Lin, Kang Liao, Yao Zhao
2022 J jnl
CoRR
Kang Liao, Chunyu Lin, Yunchao Wei, Yao Zhao
2022 J jnl
Neurocomputing
Lang Nie, Chunyu Lin, Kang Liao, Yao Zhao
2022 J jnl
CoRR
Zhijie Shen, Chunyu Lin, Lang Nie, Kang Liao, Yao Zhao
2022 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Zhijie Shen, Chunyu Lin, Lang Nie, Kang Liao, Yao Zhao
2022 conf
ECCV (1)
Zhijie Shen, Chunyu Lin, Kang Liao, Lang Nie, Zishuo Zheng, Yao Zhao
2022 J jnl
CoRR
Zhijie Shen, Chunyu Lin, Kang Liao, Lang Nie, Zishuo Zheng, Yao Zhao
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Haojie Liu, Kang Liao, Chunyu Lin, Yao Zhao, Yulan Guo
2022 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Keyao Zhao, Chunyu Lin, Kang Liao, Shangrong Yang, Yao Zhao
2022 A* conf
VR
Chunlan Zhang, Chunyu Lin, Kang Liao, Lang Nie, Yao Zhao
2022 J jnl
CoRR
Lei Zhang, Kang Liao, Chunyu Lin, Yao Zhao
2021 J jnl
IEEE Trans. Image Process.
Kang Liao, Chunyu Lin, Yao Zhao
2021 J jnl
CoRR
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2021 A conf
ICME
Zhijie Shen, Chunyu Lin, Lang Nie, Kang Liao, Yao Zhao
2021 conf
PRCV (3)
Lei Zhang, Kang Liao, Chunyu Lin, Meiqin Liu, Yao Zhao
2021 J jnl
Neurocomputing
Keyao Zhao, Kang Liao, Chunyu Lin, Meiqin Liu, Yao Zhao
2021 A* conf
ICCV
Kang Liao, Chunyu Lin, Lixin Liao, Yao Zhao, Weiyao Lin
2021 A* conf
CVPR
Shangrong Yang, Chunyu Lin, Kang Liao, Chunjie Zhang, Yao Zhao
2021 J jnl
CoRR
Shangrong Yang, Chunyu Lin, Kang Liao, Chunjie Zhang, Yao Zhao
2021 J jnl
Neurocomputing
Chunlan Zhang, Kang Liao, Chunyu Lin, Yao Zhao
2021 A* conf
ICCV
Kang Liao, Chunyu Lin, Yunchao Wei, Feng Li, Shangrong Yang, Yao Zhao
2021 J jnl
CoRR
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2021 J jnl
IEEE Trans. Image Process.
Lang Nie, Chunyu Lin, Kang Liao, Shuaicheng Liu, Yao Zhao
2020 J jnl
CoRR
Kang Liao, Chunyu Lin, Yao Zhao
2020 J jnl
J. Vis. Commun. Image Represent.
Lang Nie, Chunyu Lin, Kang Liao, Meiqin Liu, Yao Zhao
2020 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Kang Liao, Chunyu Lin, Yao Zhao, Moncef Gabbouj
2020 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Kang Liao, Chunyu Lin, Yao Zhao, Moncef Gabbouj
2020 J jnl
CoRR
Lang Nie, Chunyu Lin, Kang Liao, Yao Zhao
2020 J jnl
IEEE Trans. Image Process.
Kang Liao, Chunyu Lin, Yao Zhao, Mai Xu
2020 J jnl
IEEE J. Sel. Top. Signal Process.
Kang Liao, Chunyu Lin, Yao Zhao, Moncef Gabbouj, Yang Zheng
2020 J jnl
Sensors
Haojie Liu, Kang Liao, Chunyu Lin, Yao Zhao, Meiqin Liu
2020 conf
VR Workshops
Shiyuan Li, Chunyu Lin, Kang Liao, Yao Zhao, Xue Zhang
2020 J jnl
CoRR
Haojie Liu, Kang Liao, Chunyu Lin, Yao Zhao, Yulan Guo
2020 J jnl
J. Vis. Commun. Image Represent.
Shangrong Yang, Chunyu Lin, Kang Liao, Yao Zhao, Meiqin Liu
2019 J jnl
CoRR
Haojie Liu, Kang Liao, Chunyu Lin, Yao Zhao, Yulan Guo
2018 conf
ICSM
Zhao Pei, Miaomiao Pan, Kang Liao, Miao Ma, Chengcai Leng
tests/unit/test_apk_jadx_wrapper.py
← Index tests/unit/test_apk_jadx_wrapper.py python
"""
Unit tests for JADX wrapper subprocess management and output parsing.

All subprocess calls are mocked — no JADX/Java installation required.
"""
import os
import tempfile
import textwrap

import pytest
from unittest.mock import MagicMock, patch, call

pytestmark = [pytest.mark.unit, pytest.mark.apk, pytest.mark.decompile]


class TestJADXDecompiler:
    """Tests for JADXDecompiler subprocess wrapper."""

    @patch.dict(os.environ, {}, clear=False)
    def test_init_defaults(self):
        os.environ.pop("JADX_PATH", None)
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler()
        assert j.jadx_path == "jadx"
        assert j.timeout == 300

    def test_init_custom_path(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler(jadx_path="/usr/local/bin/jadx", timeout=300)
        assert j.jadx_path == "/usr/local/bin/jadx"
        assert j.timeout == 300

    def test_init_from_env(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        with patch.dict(os.environ, {"JADX_PATH": "/opt/jadx/bin/jadx", "JADX_TIMEOUT": "120"}):
            j = JADXDecompiler()
            assert j.jadx_path == "/opt/jadx/bin/jadx"
            assert j.timeout == 120

    @patch("subprocess.Popen")
    def test_decompile_success(self, mock_popen):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        mock_proc = MagicMock()
        mock_proc.communicate.return_value = ("output", "")
        mock_proc.returncode = 0
        mock_popen.return_value = mock_proc

        j = JADXDecompiler()
        result = j.decompile("/test.apk", "/output")
        assert result is True

    @patch("subprocess.Popen")
    def test_decompile_nonzero_exit_no_sources(self, mock_popen):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        mock_proc = MagicMock()
        mock_proc.communicate.return_value = ("", "error msg")
        mock_proc.returncode = 1
        mock_popen.return_value = mock_proc

        j = JADXDecompiler(log=MagicMock())
        result = j.decompile("/test.apk", "/nonexistent_output")
        assert result is False

    @patch("subprocess.Popen")
    def test_decompile_timeout(self, mock_popen):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        import subprocess
        mock_proc = MagicMock()
        mock_proc.communicate.side_effect = subprocess.TimeoutExpired(cmd="jadx", timeout=10)
        mock_proc.pid = 12345
        mock_popen.return_value = mock_proc

        with patch("os.getpgid", return_value=12345), \
             patch("os.killpg"):
            j = JADXDecompiler(timeout=10, log=MagicMock())
            result = j.decompile("/test.apk", "/output")
            assert result is False

    @patch("subprocess.Popen", side_effect=FileNotFoundError)
    def test_decompile_not_found(self, mock_popen):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler(log=MagicMock())
        result = j.decompile("/test.apk", "/output")
        assert result is False

    @patch("subprocess.Popen")
    def test_decompile_command_args(self, mock_popen):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        mock_proc = MagicMock()
        mock_proc.communicate.return_value = ("", "")
        mock_proc.returncode = 0
        mock_popen.return_value = mock_proc

        j = JADXDecompiler(jadx_path="/opt/jadx")
        j.decompile("/test.apk", "/output")

        cmd = mock_popen.call_args[0][0]
        assert cmd[0] == "/opt/jadx"
        assert "--no-res" in cmd
        assert "--no-imports" in cmd
        assert "--threads-count" in cmd
        assert "/test.apk" in cmd

    def test_parse_java_methods_empty_dir(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler()
        result = j.parse_java_methods("/nonexistent")
        assert result == {}

    def test_parse_java_methods_with_files(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        with tempfile.TemporaryDirectory() as tmpdir:
            sources_dir = os.path.join(tmpdir, "sources", "com", "example")
            os.makedirs(sources_dir)

            java_content = textwrap.dedent("""\
                package com.example;

                public class MyClass {
                    public void doStuff(int x) {
                        System.out.println(x);
                    }

                    private String getName() {
                        return "test";
                    }
                }
            """)
            with open(os.path.join(sources_dir, "MyClass.java"), "w") as f:
                f.write(java_content)

            j = JADXDecompiler()
            methods = j.parse_java_methods(tmpdir)
            assert len(methods) >= 1

    def test_extract_methods_from_java(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        source = textwrap.dedent("""\
            public void foo(int x) {
                if (x > 0) {
                    System.out.println(x);
                }
            }
        """)
        j = JADXDecompiler()
        methods = j._extract_methods_from_java(source, "com.example.Test")
        assert len(methods) == 1
        key = list(methods.keys())[0]
        assert "foo" in key

    def test_is_method_declaration_valid(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler()
        result = j._is_method_declaration("    public void foo(int x) {")
        assert result is not None
        assert result[0] == "foo"

    def test_is_method_declaration_control_flow(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler()
        # 'if', 'for', etc. should not be recognized as methods
        assert j._is_method_declaration("        if (x > 0) {") is None
        assert j._is_method_declaration("        for (int i = 0; i < 10; i++) {") is None

    def test_is_method_declaration_static(self):
        from redb.extractors.decompiler.apk.jadx_wrapper import JADXDecompiler
        j = JADXDecompiler()
        result = j._is_method_declaration("    public static void main(String[] args) {")
        assert result is not None
        assert result[0] == "main"