Xiaodong Liu

194 papers B 8C 7Journal 144Unranked 33
YearRankTypeTitle / Venue / Authors
2026 J jnl
Inf. Sci.
Yao Li, Ming Chi, Wei Lu, Xiaodong Liu, Witold Pedrycz
2026 J jnl
Expert Syst. Appl.
Meitong Chen, Liyong Zhang, Wei Lu, Xiaodong Liu, Witold Pedrycz
2026 J jnl
IEEE Trans. Ind. Informatics
Guolin Xiao, Qi Lang, Wei Lu, Xiaodong Liu
2025 J jnl
Concurr. Comput. Pract. Exp.
Yashuang Mu, Tian Liu, Wenqiang Zhang, Hongyue Guo, Lidong Wang, Xiaodong Liu
2025 J jnl
Netw. Model. Anal. Health Informatics Bioinform.
Wenjuan Jia, Jianshuai Zhang, Hongyue Guo, Lidong Wang, Xiaodong Liu
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Zhiwei Wang, Qi Lang, Xiaodong Liu, Hao Zhang
2025 J jnl
Inf. Sci.
Jun Zhang, Shaocheng Tong, Xiaodong Liu
2025 J jnl
Expert Syst. Appl.
Yao Li, Ming Chi, Xiaodong Liu
2025 J jnl
Symmetry
Yuhai Yang, Xiaodong Liu, Wei Lu
2025 J jnl
Knowl. Based Syst.
Yan Fang, Xiaodong Liu, Wei Lu, Witold Pedrycz, Qi Lang, Jianhua Yang
2025 J jnl
Neurocomputing
Qi Lang, Minghao Yin, Zhiwei Wang, Xiaodong Liu, Shuang Liang
2024 conf
ICDLT
Hao Zhang, Yan Fang, Xiaodong Liu
2024 J jnl
IEEE Trans. Fuzzy Syst.
Qi Lang, Witold Pedrycz, Xiaodong Liu, Yan Fang
2024 J jnl
Neurocomputing
Zhiwei Wang, Qi Lang, Xiaodong Liu, Wenlin Jing
2024 conf
ICDLT
Yiqiong Xue, Xiaodong Liu
2024 J jnl
Expert Syst. Appl.
Bo Wang, Xiaodong Liu, Ming Chi, Yao Li
2024 conf
ASCC
Chongzhang Wang, Xiaori Gao, Lidong Wang, Xiaodong Liu
2024 conf
ICDLT
Shuang Wu, Qi Lang, Xiaodong Liu
2024 J jnl
Appl. Soft Comput.
Hongyue Guo, Yashuang Mu, Lidong Wang, Xiaodong Liu, Witold Pedrycz
2024 J jnl
Expert Syst. Appl.
Yan Fang, Qi Lang, Wei Lu, Xiaodong Liu, Jianhua Yang
2024 J jnl
IEEE Trans. Cybern.
Hongyue Guo, Mengjun Wan, Lidong Wang, Xiaodong Liu, Witold Pedrycz
2024 B conf
IJCNN
Xiaodong Liu, Hao Zhang, Wenyin Gong, Xiang Li
2023 J jnl
Appl. Intell.
Yashuang Mu, Kai Hou, Zihao Zhang, Hongyue Guo, Lidong Wang, Xiaodong Liu
2023 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Qi Lang, Xiaodong Liu, Wenjuan Jia
2023 J jnl
IEEE ACM Trans. Audio Speech Lang. Process.
Yan Fang, Wei Lu, Xiaodong Liu, Witold Pedrycz, Qi Lang, Jianhua Yang
2023 J jnl
Inf. Sci.
Likui Wang, Lei Zhang, Xiangpeng Xie, Xiaodong Liu, Junhua Gu
2022 B conf
FUZZ-IEEE
Yanli Wang, Wei Lu, Xiaodong Liu, Xiaoyong Wang
2022 J jnl
IEEE Trans. Fuzzy Syst.
Yuangang Wang, Haoran Liu, Wenjuan Jia, Shuo Guan, Xiaodong Liu, Xiaodong Duan
2022 J jnl
IEEE Trans. Fuzzy Syst.
Hongyue Guo, Haibo Kuang, Lidong Wang, Xiaodong Liu, Witold Pedrycz
2022 J jnl
Inf. Sci.
Yashuang Mu, Jiangyong Wang, Wei Wei, Hongyue Guo, Lidong Wang, Xiaodong Liu
2022 J jnl
IEEE Trans. Cybern.
Wenjuan Jia, Xiaodong Liu, Yuangang Wang, Witold Pedrycz, Juxiang Zhou
2022 J jnl
IEEE Trans. Fuzzy Syst.
Lidong Wang, Fang Zhao, Hongyue Guo, Xiaodong Liu, Witold Pedrycz
2022 J jnl
IEEE Trans. Cybern.
Hongyue Guo, Lidong Wang, Xiaodong Liu, Witold Pedrycz
2021 J jnl
Int. J. Approx. Reason.
Jing Guo, Wei Lu, Jianhua Yang, Xiaodong Liu
2021 J jnl
IEEE Trans. Fuzzy Syst.
Wei Lu, Witold Pedrycz, Jianhua Yang, Xiaodong Liu
2021 J jnl
IEEE Trans. Cybern.
Wei Lu, Witold Pedrycz, Jianhua Yang, Xiaodong Liu
2021 J jnl
IEEE Trans. Cybern.
Hongyue Guo, Lidong Wang, Xiaodong Liu, Witold Pedrycz
2021 J jnl
Appl. Soft Comput.
Qi Lang, Xiaodong Liu, Yingjie Deng
2021 conf
SPAC
Xiaori Gao, Xiaodong Liu
2021 J jnl
IEEE Trans. Cybern.
Guoliang Feng, Wei Lu, Witold Pedrycz, Jianhua Yang, Xiaodong Liu
2020 J jnl
IEEE Access
Qi Lang, Xuejun Pan, Xiaodong Liu
2020 J jnl
J. Intell. Fuzzy Syst.
Guolin Hu, Likui Wang, Xiaodong Liu
2020 J jnl
Pattern Recognit.
Yashuang Mu, Xiaodong Liu, Lidong Wang, Juxiang Zhou
2020 J jnl
IEEE Trans. Fuzzy Syst.
Xiaodong Liu, Wenjuan Jia, Wanquan Liu, Witold Pedrycz
2020 J jnl
J. Circuits Syst. Comput.
Shweta Sengar, Xiaodong Liu
2020 J jnl
J. Intell. Fuzzy Syst.
Yashuang Mu, Lidong Wang, Xiaodong Liu
2020 J jnl
J. Ambient Intell. Humaniz. Comput.
Shweta Sengar, Xiaodong Liu
2020 J jnl
IEEE Trans. Fuzzy Syst.
Wei Lu, Guoliang Feng, Xiaodong Liu, Witold Pedrycz, Liyong Zhang, Jianhua Yang
2020 J jnl
Soft Comput.
Shweta Sengar, Xiaodong Liu
2019 J jnl
Math. Found. Comput.
Wenjuan Jia, Yingjie Deng, Chenyang Xin, Xiaodong Liu, Witold Pedrycz
2019 J jnl
Concurr. Comput. Pract. Exp.
Yashuang Mu, Xiaodong Liu, Lidong Wang, Aamer Bilal Asghar
2019 J jnl
Int. J. Mach. Learn. Cybern.
Hongyue Guo, Lidong Wang, Xiaodong Liu
2019 J jnl
Neural Comput. Appl.
Hongyue Guo, Witold Pedrycz, Xiaodong Liu
2019 J jnl
IEEE Trans. Fuzzy Syst.
Wei Lu, Dan Shan, Witold Pedrycz, Liyong Zhang, Jianhua Yang, Xiaodong Liu
2019 J jnl
Multim. Tools Appl.
Juxiang Zhou, Xiaodong Liu, Wanquan Liu, Jianhou Gan
2019 J jnl
CoRR
Guoliang Feng, Wei Lu, Witold Pedrycz, Jianhua Yang, Xiaodong Liu
2019 J jnl
Inf. Sci.
Wei Lu, Wei Zhou, Dan Shan, Liyong Zhang, Jianhua Yang, Xiaodong Liu
2018 J jnl
Inf. Sci.
Yashuang Mu, Xiaodong Liu, Lidong Wang
2018 J jnl
Concurr. Comput. Pract. Exp.
Yashuang Mu, Lidong Wang, Xiaodong Liu
2018 J jnl
Int. J. Mach. Learn. Cybern.
Juxiang Zhou, Xiaodong Liu, Tianwei Xu, Jianhou Gan, Wanquan Liu
2018 J jnl
Appl. Soft Comput.
Yuangang Wang, Xiaodong Duan, Xiaodong Liu, Cunrui Wang, Zedong Li
2018 J jnl
IEEE Trans. Fuzzy Syst.
Xiaodong Duan, Yuangang Wang, Witold Pedrycz, Xiaodong Liu, Cunrui Wang, Zedong Li
2018 J jnl
Neurocomputing
Aamer Bilal Asghar, Xiaodong Liu
2018 J jnl
J. Intell. Fuzzy Syst.
Guolin Hu, Xiaodong Liu, Likui Wang, Hongxing Li
2018 J jnl
Algorithms
Jing Wang, Lidong Wang, Xiaodong Liu, Yan Ren, Ye Yuan
2018 J jnl
Neurocomputing
Aamer Bilal Asghar, Xiaodong Liu
2018 J jnl
Inf. Sci.
Likui Wang, Xiaodong Liu, Huaguang Zhang
2018 conf
ICNC-FSKD
Yanli Meng, Yifei Liu, Lidong Wang, Xiaodong Liu
2018 J jnl
IEEE Trans. Fuzzy Syst.
Hongyue Guo, Witold Pedrycz, Xiaodong Liu
2018 J jnl
WIREs Data Mining Knowl. Discov.
Xiaodong Liu, Wenjuan Jia, Yuangang Wang, Hongyue Guo, Yan Ren, Zedong Li
2018 conf
COMPSAC (2)
Xiaodong Liu, Hongji Yang
2018 J jnl
Symmetry
Lidong Wang, Yanjun Wang, Xiaodong Liu
2017 J jnl
Concurr. Comput. Pract. Exp.
Yashuang Mu, Xiaodong Liu, Zhihao Yang, Xiaolin Liu
2017 conf
IJCRS (2)
Lidong Wang, Xiaodong Liu, Jinhai Li
2017 J jnl
Neurocomputing
Aamer Bilal Asghar, Xiaodong Liu
2017 J jnl
Int. J. Approx. Reason.
Liyong Zhang, Wanxie Zhong, Chongquan Zhong, Wei Lu, Xiaodong Liu, Witold Pedrycz
2017 J jnl
Int. J. Comput. Sci. Eng.
Lanlan Gu, Hongyue Guo, Xiaodong Liu
2017 J jnl
Inf. Sci.
Bin Yang, Juan Wang, Xiaodong Liu
2017 J jnl
Neurocomputing
Tianhao Li, Liyong Zhang, Wei Lu, Hui Hou, Xiaodong Liu, Witold Pedrycz, Chongquan Zhong
2017 J jnl
J. Intell. Fuzzy Syst.
Hong Yang, Xiaodong Liu, Le Zhang
2017 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Lidong Wang, Binquan Liao, Xiaodong Liu, Jingxia Liu
2016 J jnl
Int. J. Intell. Syst.
Liyong Zhang, Wei Lu, Xiaodong Liu, Witold Pedrycz, Chongquan Zhong, Lu Wang
2016 J jnl
Knowl. Based Syst.
Zhubin Sun, Xiaodong Liu, Hongyue Guo
2016 J jnl
Knowl. Based Syst.
Xin Wang, Witold Pedrycz, Adam Gacek, Xiaodong Liu
2016 J jnl
Knowl. Based Syst.
Liyong Zhang, Wei Lu, Xiaodong Liu, Witold Pedrycz, Chongquan Zhong
2016 J jnl
Neurocomputing
Li Kui Wang, Jia Li Peng, Xiaodong Liu
2016 J jnl
IEEE Trans. Cybern.
Li Kui Wang, Huaguang Zhang, Xiaodong Liu
2016 conf
COMPSAC Workshops
Xiaodong Liu, Hongji Yang
2016 J jnl
Neurocomputing
Yuangang Wang, Xiaodong Duan, Xiaodong Liu, Cunrui Wang, Zedong Li
2016 conf
ACCV (1)
Kewei Tang, Xiaodong Liu, Zhixun Su, Wei Jiang, Jiangxin Dong
2016 J jnl
Appl. Soft Comput.
Wei Lu, Liyong Zhang, Witold Pedrycz, Jianhua Yang, Xiaodong Liu
2016 J jnl
J. Intell. Fuzzy Syst.
Nini Wang, Jun Xia, Jianchuan Yin, Xiaodong Liu
2015 J jnl
Int. J. Intell. Syst.
Wei Lu, Liyong Zhang, Xiaodong Liu, Jianhua Yang, Witold Pedrycz
2015 J jnl
Inf. Sci.
Li Kui Wang, Jia Li Peng, Xiaodong Liu, Huaguang Zhang
2015 J jnl
Neural Comput. Appl.
Huisheng Zhang, Yanli Tang, Xiaodong Liu
2015 J jnl
J. Intell. Fuzzy Syst.
Likui Wang, Jia Li Peng, Xiaodong Liu, Huaguang Zhang
2015 J jnl
Appl. Soft Comput.
Xiaodong Liu, Xianchang Wang, Witold Pedrycz
2015 J jnl
Inf. Sci.
Weina Wang, Xiaodong Liu
2015 J jnl
Pattern Recognit.
Xianchang Wang, Xiaodong Liu, Witold Pedrycz, Lishi Zhang
2015 conf
COMPSAC Workshops
Xiaodong Liu, Hongji Yang
2015 J jnl
J. Intell. Fuzzy Syst.
Angelo Dan Ebonzo Menga, Jing Lu, Xiaodong Liu
2015 J jnl
Eng. Appl. Artif. Intell.
Weina Wang, Witold Pedrycz, Xiaodong Liu
2015 J jnl
Int. J. Approx. Reason.
Wei Lu, Xueyan Chen, Witold Pedrycz, Xiaodong Liu, Jianhua Yang
2014 J jnl
Inf. Sci.
Yongyun Shao, Xiaodong Liu, Xin Sun, Qingling Zhang
2014 J jnl
Appl. Soft Comput.
Xianchang Wang, Xiaodong Liu, Lishi Zhang
2014 J jnl
Neural Comput. Appl.
Xiaojuan Tian, Xiaodong Liu, Lidong Wang
2014 J jnl
Expert Syst. Appl.
Liyong Zhang, Witold Pedrycz, Wei Lu, Xiaodong Liu, Li Zhang
2014 B conf
FUZZ-IEEE
Xinyu Qiao, Zhenying Li, Wei Lu, Xiaodong Liu
2014 J jnl
Expert Syst. Appl.
Lizhu Wang, Xiaodong Liu, Witold Pedrycz, Yongyun Shao
2014 J jnl
Soft Comput.
Witold Pedrycz, Wei Lu, Xiaodong Liu, Wei Wang, Lizhong Wang
2014 J jnl
Int. J. Comput. Commun. Control
Wei Lu, Jianhua Yang, Xiaodong Liu
2014 J jnl
Int. J. Mach. Learn. Cybern.
Yi Li, Xiaodong Liu, Zhijun Gao
2014 J jnl
Knowl. Based Syst.
Wei Lu, Jianhua Yang, Xiaodong Liu, Witold Pedrycz
2014 J jnl
Expert Syst. Appl.
Wei Lu, Witold Pedrycz, Xiaodong Liu, Jianhua Yang, Peng Li
2013 J jnl
Neural Comput. Appl.
Mingliang Xue, Wanquan Liu, Xiaodong Liu
2013 conf
ISNN (1)
Huisheng Zhang, Xiaodong Liu, Dongpo Xu
2013 J jnl
Expert Syst. Appl.
Lizhu Wang, Xiaodong Liu, Witold Pedrycz
2013 J jnl
Data Knowl. Eng.
Xiaodong Liu, Xinghua Feng, Witold Pedrycz
2013 J jnl
Circuits Syst. Signal Process.
Likui Wang, Xiaodong Liu
2013 J jnl
Inf. Sci.
Likui Wang, Xiaodong Liu
2013 conf
IFSA/NAFIPS
Xinghua Feng, Xiaodong Liu
2013 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Huaguang Zhang, Feisheng Yang, Xiaodong Liu, Qingling Zhang
2013 conf
GreenCom/iThings/CPScom
Daren Fang, Xiaodong Liu, Lin Liu, Hongji Yang
2013 J jnl
Math. Comput. Sci.
Lidong Wang, Xiaodong Liu, Yashuang Mu
2013 J jnl
Int. J. Comput. Intell. Appl.
Wei Lu, Liyong Zhang, Jianhua Yang, Xiaodong Liu
2013 conf
IFSA/NAFIPS
Wei Lu, Jianhua Yang, Xiaodong Liu
2012 C conf
APSCC
Huiqun Zhao, Jing Sun, Xiaodong Liu
2012 J jnl
Int. J. Autom. Comput.
Yongyun Shao, Xiaodong Liu, Xin Sun, Zhan Su
2012 conf
RSCTC
Lidong Wang, Xiaodong Liu, Xin Wang
2012 J jnl
Appl. Soft Comput.
Yan Ren, Xiaodong Liu, Wanquan Liu
2012 J jnl
Fundam. Informaticae
Lidong Wang, Yan Ren, Xiaodong Liu
2012 C conf
CLOSER
Huiqun Zhao, Jing Sun, Xiaodong Liu
2012 conf
ICITST
Zhe Wang, Xiaodong Liu, Kevin Chalmers, Guojian Cheng
2012 J jnl
Neurocomputing
Chong Lu, Xiaodong Liu, Wanquan Liu
2012 J jnl
Expert Syst. Appl.
Wangren Qiu, Xiaodong Liu, Lidong Wang
2012 J jnl
Eur. J. Oper. Res.
Xin Wang, Xiaodong Liu, Witold Pedrycz, Xiaolei Zhu, Guangfei Hu
2012 J jnl
Int. J. Approx. Reason.
Lidong Wang, Xiaodong Liu, Wangren Qiu
2012 J jnl
Fuzzy Optim. Decis. Mak.
Ye Li, Xiaodong Liu, Yan Chen
2012 J jnl
J. Comput.
Wei Lu, Jianhua Yang, Xiaodong Liu
2012 conf
COMPSAC Workshops
Daren Fang, Xiaodong Liu, Imed Romdhani, Huiqun Zhao
2011 conf
RSKT
Lidong Wang, Xiaodong Liu, Xiaojuan Tian
2011 J jnl
Expert Syst. Appl.
Wangren Qiu, Xiaodong Liu, Hailin Li
2011 J jnl
Inf. Sci.
Yan Ren, Xiaodong Liu, Jiannong Cao
2011 J jnl
J. Signal Process. Syst.
Chong Lu, Senjian An, Wanquan Liu, Xiaodong Liu
2011 J jnl
Circuits Syst. Signal Process.
Likui Wang, Xiaodong Liu
2011 conf
COMPSAC Workshops
Zakwan Jaroucheh, Xiaodong Liu, Sally Smith, Huiqun Zhao
2011 J jnl
Int. J. Syst. Sci.
Likui Wang, Xiaodong Liu
2011 J jnl
Expert Syst. Appl.
Ye Li, Xiaodong Liu, Yan Chen
2010 J jnl
Inf. Sci.
Lidong Wang, Xiaodong Liu, Jiannong Cao
2010 C conf
SEKE
Chengpu Li, Xiaodong Liu, Jessie B. Kennedy
2010 conf
LSMS/ICSEE
Chong Lu, Xiaodong Liu, Wanquan Liu
2010 J jnl
Appl. Soft Comput.
Xiaodong Liu, Yan Ren
2010 J jnl
Sci. China Inf. Sci.
Likui Wang, Xiaodong Liu
2009 conf
HIS (3)
Yanli Zhang, Xiaodong Liu, Xueying Wang
2009 conf
PCM
Chong Lu, Senjian An, Wanquan Liu, Xiaodong Liu
2009 J jnl
Eur. J. Oper. Res.
Xuelian Xu, Xiaodong Liu, Yan Chen
2009 book
Xiaodong Liu, Witold Pedrycz
2009 J jnl
Fuzzy Sets Syst.
Li Li, Xiaodong Liu, Tianyou Chai
2009 J jnl
Inf. Sci.
Li Li, Xiaodong Liu
2009 J jnl
IEEE Trans. Knowl. Data Eng.
Xiaodong Liu, Witold Pedrycz, Tianyou Chai, Mingli Song
2008 conf
ISNN (1)
Nini Wang, Xiaodong Liu, Jianchuan Yin
2008 J jnl
Knowl. Based Syst.
Lidong Wang, Xiaodong Liu
2008 conf
ISNN (1)
Nini Wang, Xiaodong Liu, Jianchuan Yin
2008 J jnl
Autom.
Likui Wang, Xiaodong Liu
2008 J jnl
Inf. Sci.
Lidong Wang, Xiaodong Liu
2008 conf
ICIC (1)
Chong Lu, Wanquan Liu, Xiaodong Liu, Senjian An
2008 J jnl
Appl. Math. Comput.
Li Li, Fajun Yu, Xiaodong Liu
2008 B conf
COMPSAC
Xiaodong Liu, Hongji Yang
2008 B conf
COMPSAC
Xiaodong Liu, Hongji Yang
2008 B conf
COMPSAC
Chengpu Li, Xiaodong Liu, Jessie B. Kennedy
2007 J jnl
Inf. Sci.
Xiaodong Liu, Tianyou Chai, Wei Wang, Wanquan Liu
2007 J jnl
Inf. Sci.
Xiaodong Liu, Wei Wang, Tianyou Chai, Wanquan Liu
2007 conf
ICIC (2)
Xiaoguang Yang, Li Li, Qingling Zhang, Xiaodong Liu, Quanying Zhu
2007 J jnl
Appl. Soft Comput.
Xiaodong Liu, Witold Pedrycz
2007 J jnl
Int. J. Intell. Syst. Technol. Appl.
Xiaodong Liu, Lishi Zhang, Jun Zhou, Kejiu Zhu, Qingling Zhang
2006 conf
FSKD
Lishi Zhang, Xiaodong Liu
2006 conf
FSKD
Rui Ding, Xiaodong Liu, Yan Chen
2005 conf
ICNC (3)
Xiaodong Liu, Wanquan Liu
2005 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Xiaodong Liu, Wei Wang, Tianyou Chai
2004 conf
RAM
Xiaodong Liu, Yibing Wang, Wanquan Liu
2003 J jnl
IEEE Trans. Fuzzy Syst.
Xiaodong Liu, Qingling Zhang
2003 B conf
FUZZ-IEEE
Xiaodong Liu, Witold Pedrycz, Qingling Zhang
2003 J jnl
Autom.
Xiaodong Liu, Qingling Zhang
2002 C conf
ACC
Xiaodong Liu, Qingling Zhang
2002 C conf
ACC
Zhihua Zhao, Qingling Zhang, Xiaodong Liu
2002 conf
CDC
Xiaodong Liu, Qingling Zhang
2000 J jnl
J. Softw. Maintenance Res. Pract.
Hongji Yang, Xiaodong Liu, Hussein Zedan
1999 J jnl
Fuzzy Sets Syst.
Xiaodong Liu
1999
Xiaodong Liu
1998 C conf
APSEC
Zhiqiang Chen, Antonio Cau, Hussein Zedan, Xiaodong Liu, Hongji Yang
1998 conf
ICSM
Hongji Yang, Xiaodong Liu, Hussein Zedan
1998 J jnl
Fuzzy Sets Syst.
Xiaodong Liu
1997 C conf
APSEC
Xiaodong Liu, Zhiqiang Chen, Hongji Yang, Hussein Zedan, William C. Chu
1997 B conf
COMPSAC
Xiaodong Liu, Hongji Yang, Hussein Zedan
redb/extractors/apk_extractors/apk_dex.py
← Index redb/extractors/apk_extractors/apk_dex.py python
import hashlib
import inspect
import json
from collections import Counter
from datetime import datetime, timezone
from typing import Any

import tlsh

from redb.extractors.enum import Tag
from redb.extractors.apk_extractor import APKExtractor
from redb.models.dataclasses import APKDexFile

# Sensitive API patterns categorized for malware analysis
SENSITIVE_API_CATEGORIES = {
    "reflection": [
        "Ljava/lang/reflect/Method;->invoke",
        "Ljava/lang/reflect/Field;->get",
        "Ljava/lang/reflect/Field;->set",
        "Ljava/lang/reflect/Constructor;->newInstance",
        "Ljava/lang/Class;->forName",
        "Ljava/lang/Class;->getMethod",
        "Ljava/lang/Class;->getDeclaredMethod",
        "Ljava/lang/Class;->getDeclaredField",
        "Ljava/lang/ClassLoader;->loadClass",
    ],
    "crypto": [
        "Ljavax/crypto/Cipher;->getInstance",
        "Ljavax/crypto/Cipher;->init",
        "Ljavax/crypto/spec/SecretKeySpec;-><init>",
        "Ljavax/crypto/spec/IvParameterSpec;-><init>",
        "Ljava/security/MessageDigest;->getInstance",
        "Ljava/security/KeyStore;->getInstance",
        "Ljavax/crypto/Mac;->getInstance",
    ],
    "dynamic_loading": [
        "Ldalvik/system/DexClassLoader;-><init>",
        "Ldalvik/system/PathClassLoader;-><init>",
        "Ldalvik/system/InMemoryDexClassLoader;-><init>",
        "Ldalvik/system/BaseDexClassLoader;-><init>",
        "Ljava/lang/Runtime;->exec",
        "Ljava/lang/ProcessBuilder;->start",
    ],
    "telephony": [
        "Landroid/telephony/TelephonyManager;->getDeviceId",
        "Landroid/telephony/TelephonyManager;->getSubscriberId",
        "Landroid/telephony/TelephonyManager;->getLine1Number",
        "Landroid/telephony/TelephonyManager;->getSimSerialNumber",
        "Landroid/telephony/TelephonyManager;->getNetworkOperator",
        "Landroid/telephony/TelephonyManager;->getSimOperator",
    ],
    "sms": [
        "Landroid/telephony/SmsManager;->sendTextMessage",
        "Landroid/telephony/SmsManager;->sendMultipartTextMessage",
        "Landroid/telephony/SmsManager;->sendDataMessage",
    ],
    "network": [
        "Ljava/net/HttpURLConnection;->connect",
        "Ljava/net/URL;->openConnection",
        "Lokhttp3/OkHttpClient;-><init>",
        "Lokhttp3/Request$Builder;->build",
        "Lorg/apache/http/client/HttpClient;->execute",
        "Landroid/webkit/WebView;->loadUrl",
        "Landroid/webkit/WebView;->setWebViewClient",
    ],
    "native": [
        "Ljava/lang/System;->loadLibrary",
        "Ljava/lang/System;->load",
        "Ljava/lang/Runtime;->loadLibrary",
    ],
    "device_info": [
        "Landroid/os/Build;->FINGERPRINT",
        "Landroid/os/Build;->MODEL",
        "Landroid/os/Build;->MANUFACTURER",
        "Landroid/os/Build;->PRODUCT",
        "Landroid/os/Build;->BRAND",
        "Landroid/os/Build;->DEVICE",
        "Landroid/os/Build;->HARDWARE",
        "Landroid/os/Build;->SERIAL",
        "Landroid/os/Build$VERSION;->SDK_INT",
        "Landroid/provider/Settings$Secure;->getString",
    ],
    "file_io": [
        "Ljava/io/FileOutputStream;-><init>",
        "Ljava/io/FileInputStream;-><init>",
        "Landroid/content/SharedPreferences;->edit",
        "Landroid/database/sqlite/SQLiteDatabase;->execSQL",
        "Landroid/database/sqlite/SQLiteDatabase;->rawQuery",
    ],
    "ipc": [
        "Landroid/content/ContentResolver;->query",
        "Landroid/content/ContentResolver;->insert",
        "Landroid/content/ContentResolver;->delete",
        "Landroid/content/Intent;-><init>",
        "Landroid/content/Context;->sendBroadcast",
        "Landroid/content/Context;->startService",
        "Landroid/content/Context;->bindService",
    ],
}


class APKDexExtractor(APKExtractor):

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False,
        apk=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, apk,
        )
        self.dex_files = []
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.APK_DEX.value

    def _analyze_api_usage(self, dex):
        """Categorize sensitive API calls found in DEX bytecode."""
        api_usage = {cat: set() for cat in SENSITIVE_API_CATEGORIES}

        try:
            for method in dex.get_encoded_methods():
                code = method.get_code()
                if not code:
                    continue
                try:
                    bytecode = code.get_bc()
                    if not bytecode:
                        continue
                    for instruction in bytecode.get_instructions():
                        op_name = instruction.get_name()
                        if not op_name or not op_name.startswith("invoke"):
                            continue
                        output = instruction.get_output()
                        if not output:
                            continue
                        for category, patterns in SENSITIVE_API_CATEGORIES.items():
                            for pattern in patterns:
                                if pattern in output:
                                    api_usage[category].add(output.strip())
                                    break
                except Exception:
                    continue
        except Exception as e:
            self.log.warning(f"Error analyzing API usage: {e}")

        # Convert sets to sorted lists
        return {cat: sorted(calls) for cat, calls in api_usage.items() if calls}

    def _compute_obfuscation_indicators(self, classes, methods):
        """Compute obfuscation indicators from class/method names."""
        class_names = []
        for cls in classes:
            try:
                name = cls.get_name()
                if name:
                    class_names.append(name)
            except Exception:
                continue

        method_names = []
        for m in methods:
            try:
                name = m.get_name()
                if name and name not in ("<init>", "<clinit>"):
                    method_names.append(name)
            except Exception:
                continue

        if not class_names:
            return None

        # Short class names: extract just the class part from Dalvik notation
        short_class = 0
        for n in class_names:
            simple = n.split("/")[-1].rstrip(";")
            if len(simple) <= 2:
                short_class += 1

        short_method = sum(1 for n in method_names if len(n) <= 2)

        return {
            "short_class_names_pct": round(short_class / max(len(class_names), 1), 4),
            "short_method_names_pct": round(short_method / max(len(method_names), 1), 4),
            "non_ascii_identifiers": sum(1 for n in class_names if not n.isascii()),
            "avg_class_name_length": round(
                sum(len(n) for n in class_names) / max(len(class_names), 1), 2
            ),
        }

    def _compute_top_packages(self, classes):
        """Compute top packages by class count."""
        package_counter = Counter()
        for cls in classes:
            try:
                name = cls.get_name()  # "Lcom/example/foo/Bar;"
                if not name:
                    continue
                parts = name[1:].replace("/", ".").rsplit(".", 1)
                if len(parts) > 1:
                    package = parts[0]
                else:
                    package = "(default)"
                package_counter[package] += 1
            except Exception:
                continue

        return [
            {"package": pkg, "class_count": count}
            for pkg, count in package_counter.most_common(20)
        ]

    def extract(self):
        if not self._is_valid_apk():
            self.log.error(f"Invalid APK for {self.hash.sha256}")
            return None

        from androguard.core.dex import DEX

        try:
            dex_names = list(self.apk.get_dex_names() or [])
        except Exception as e:
            self.log.warning(f"Error getting DEX names for {self.hash.sha256}: {e}")
            dex_names = []

        try:
            dex_buffers = list(self.apk.get_all_dex() or [])
        except Exception as e:
            self.log.error(f"Error getting DEX buffers for {self.hash.sha256}: {e}")
            return None

        if not dex_buffers:
            self.log.debug("No DEX files found in APK")
            return None

        self.dex_files = []
        for i, dex_data in enumerate(dex_buffers):
            dex_name = dex_names[i] if i < len(dex_names) else f"classes{i}.dex"

            dex_sha256 = hashlib.sha256(dex_data).hexdigest()
            dex_tlsh = None
            if len(dex_data) >= 50:
                try:
                    dex_tlsh = tlsh.hash(dex_data) or None
                except Exception:
                    pass

            try:
                d = DEX(dex_data)
            except Exception as e:
                self.log.warning(f"Failed to parse DEX {dex_name}: {e}")
                continue

            try:
                classes = list(d.get_classes() or [])
            except Exception as e:
                self.log.warning(f"Error getting classes from {dex_name}: {e}")
                classes = []
            try:
                methods = list(d.get_methods() or [])
            except Exception as e:
                self.log.warning(f"Error getting methods from {dex_name}: {e}")
                methods = []
            try:
                strings = list(d.get_strings() or [])
            except Exception as e:
                self.log.warning(f"Error getting strings from {dex_name}: {e}")
                strings = []

            try:
                top_packages = self._compute_top_packages(classes)
            except Exception as e:
                self.log.warning(f"Error computing top packages for {dex_name}: {e}")
                top_packages = []
            try:
                api_usage = self._analyze_api_usage(d)
            except Exception as e:
                self.log.warning(f"Error analyzing API usage for {dex_name}: {e}")
                api_usage = {}
            try:
                obfuscation_indicators = self._compute_obfuscation_indicators(classes, methods)
            except Exception as e:
                self.log.warning(f"Error computing obfuscation indicators for {dex_name}: {e}")
                obfuscation_indicators = None

            self.dex_files.append(APKDexFile(
                filename=dex_name,
                sha256=dex_sha256,
                class_count=len(classes),
                method_count=len(methods),
                string_count=len(strings),
                tlsh=dex_tlsh,
                top_packages=top_packages,
                api_usage=api_usage if api_usage else None,
                obfuscation_indicators=obfuscation_indicators,
            ))

        return self.dex_files if self.dex_files else None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            if not self.dex_files:
                return None

            current_time = datetime.now(timezone.utc)

            # DEX table: one row per DEX file
            dex_data = []
            for dex in self.dex_files:
                dex_data.append([
                    self.sha256,
                    dex.sha256,
                    dex.filename,
                    dex.tlsh,
                    dex.class_count,
                    dex.method_count,
                    dex.string_count,
                    json.dumps(dex.top_packages) if dex.top_packages else None,
                    json.dumps(dex.obfuscation_indicators) if dex.obfuscation_indicators else None,
                    current_time,
                ])

            # API usage table: one row per category per DEX
            api_data = []
            for dex in self.dex_files:
                if dex.api_usage:
                    for category, api_calls in dex.api_usage.items():
                        api_data.append([
                            self.sha256,
                            dex.sha256,
                            category,
                            api_calls,
                            current_time,
                        ])

            return {
                'multi_table': True,
                'dex': {
                    'table': 'redb_apk_dex',
                    'data': dex_data,
                    'column_names': [
                        'sha256', 'dex_sha256', 'dex_filename', 'dex_tlsh',
                        'dex_class_count', 'dex_method_count', 'dex_string_count',
                        'dex_top_packages', 'dex_obfuscation_indicators',
                        'analysis_date',
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(64)', 'String', 'Nullable(String)',
                        'UInt32', 'UInt32', 'UInt32',
                        'Nullable(String)', 'Nullable(String)',
                        "DateTime64(3, 'UTC')",
                    ],
                },
                'api_usage': {
                    'table': 'redb_apk_dex_api_usage',
                    'data': api_data,
                    'column_names': [
                        'sha256', 'dex_sha256', 'api_category',
                        'api_calls', 'analysis_date',
                    ],
                    'column_type_names': [
                        'FixedString(64)', 'FixedString(64)', 'LowCardinality(String)',
                        'Array(String)', "DateTime64(3, 'UTC')",
                    ],
                },
            }

    def get_clickhouse_table(self) -> str:
        return "redb_apk_dex"