Radu Florian

142 papers A* 23A 2B 5Journal 70Unranked 42
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Meet Doshi, Aashka Trivedi, Vishwajeet Kumar, Parul Awasthy, Yulong Li, Jaydeep Sen, Radu Florian, Sachindra Joshi
2025 J jnl
Trans. Assoc. Comput. Linguistics
Sara Rosenthal, Avirup Sil, Radu Florian, Salim Roukos
2025 J jnl
CoRR
Linh Tran, Yulong Li, Radu Florian, Wei Sun
2025 J jnl
CoRR
Malik H. Altakrori, Nizar Habash, Abdelhakim Freihat, Younes Samih, Kirill Chirkunov, Muhammed AbuOdeh, Radu Florian, Teresa Lynn, Preslav Nakov, Alham Fikri Aji
2025 B conf
COLING
Teresa Lynn, Malik H. Altakrori, Samar Mohamed Magdy, Rocktim Jyoti Das, Chenyang Lyu, Mohamed Nasr, Younes Samih, Kirill Chirkunov, Alham Fikri Aji, Preslav Nakov, Shantanu Godbole, Salim Roukos, Radu Florian, Nizar Habash
2025 J jnl
CoRR
Parul Awasthy, Aashka Trivedi, Yulong Li, Mihaela A. Bornea, David Cox, Abraham Daniels, Martin Franz, Gabe Goodhart, Bhavani Iyer, Vishwajeet Kumar, Luis A. Lastras, J. Scott McCarley, Rudra Murthy, Vignesh P, Sara Rosenthal, Salim Roukos, Jaydeep Sen, Sukriti Sharma, Avirup Sil, Kate Soule, Md. Arafat Sultan, Radu Florian
2025 J jnl
CoRR
Parul Awasthy, Aashka Trivedi, Yulong Li, Meet Doshi, Riyaz A. Bhat, Vignesh P, Vishwajeet Kumar, Yushu Yang, Bhavani Iyer, Abraham Daniels, Rudra Murthy, Ken Barker, Martin Franz, Madison Lee, Todd Ward, Salim Roukos, David Cox, Luis A. Lastras, Jaydeep Sen, Radu Florian
2025 J jnl
CoRR
Ramón Fernandez Astudillo, Md. Arafat Sultan, Aashka Trivedi, Yousef El-Kurdi, Tahira Naseem, Radu Florian, Salim Roukos
2024 conf
ACL (Findings)
Tahira Naseem, Guangxuan Xu, Sarathkrishna Swaminathan, Asaf Yehudai, Subhajit Chaudhury, Radu Florian, Ramón Fernandez Astudillo, Asim Munawar
2024 A* conf
AAAI
Maria Chang, Achille Fokoue, Rosario Uceda-Sosa, Parul Awasthy, Ken Barker, Sadhana Kumaravel, Oktie Hassanzadeh, Elton F. S. Soares, Tian Gao, Debarun Bhattacharjya, Radu Florian, Salim Roukos
2024 J jnl
CoRR
Sara Rosenthal, Avirup Sil, Radu Florian, Salim Roukos
2024 J jnl
CoRR
Teresa Lynn, Malik H. Altakrori, Samar Mohamed Magdy, Rocktim Jyoti Das, Chenyang Lyu, Mohamed Nasr, Younes Samih, Alham Fikri Aji, Preslav Nakov, Shantanu Godbole, Salim Roukos, Radu Florian, Nizar Habash
2024 J jnl
CoRR
Young-Suk Lee, R. Chulaka Gunasekara, Danish Contractor, Ramón Fernandez Astudillo, Radu Florian
2024 J jnl
CoRR
Jasper Xian, Saron Samuel, Faraz Khoubsirat, Ronak Pradeep, Md. Arafat Sultan, Radu Florian, Salim Roukos, Avirup Sil, Christopher Potts, Omar Khattab
2024 J jnl
CoRR
Keshav Ramji, Young-Suk Lee, Ramón Fernandez Astudillo, Md. Arafat Sultan, Tahira Naseem, Asim Munawar, Radu Florian, Salim Roukos
2023 J jnl
CoRR
Young-Suk Lee, Ramón Fernandez Astudillo, Radu Florian, Tahira Naseem, Salim Roukos
2023 J jnl
CoRR
Young-Suk Lee, Md. Arafat Sultan, Yousef El-Kurdi, Tahira Naseem, Asim Munawar, Radu Florian, Salim Roukos, Ramón Fernandez Astudillo
2023 conf
EMNLP (Findings)
Young-Suk Lee, Md. Arafat Sultan, Yousef El-Kurdi, Tahira Naseem, Asim Munawar, Radu Florian, Salim Roukos, Ramón Fernandez Astudillo
2023 A* conf
AAAI
J. Scott McCarley, Mihaela A. Bornea, Sara Rosenthal, Anthony Ferritto, Md. Arafat Sultan, Avirup Sil, Radu Florian
2023 conf
ACL (Findings)
Keshav Santhanam, Jon Saad-Falcon, Martin Franz, Omar Khattab, Avi Sil, Radu Florian, Md. Arafat Sultan, Salim Roukos, Matei Zaharia, Christopher Potts
2023 conf
ACL (demo)
Avi Sil, Jaydeep Sen, Bhavani Iyer, Martin Franz, Kshitij Fadnis, Mihaela A. Bornea, Sara Rosenthal, J. Scott McCarley, Rong Zhang, Vishwajeet Kumar, Yulong Li, Md. Arafat Sultan, Riyaz A. Bhat, Jürgen Broß, Radu Florian, Salim Roukos
2023 J jnl
CoRR
Avirup Sil, Jaydeep Sen, Bhavani Iyer, Martin Franz, Kshitij Fadnis, Mihaela A. Bornea, Sara Rosenthal, J. Scott McCarley, Rong Zhang, Vishwajeet Kumar, Yulong Li, Md. Arafat Sultan, Riyaz A. Bhat, Radu Florian, Salim Roukos
2023 J jnl
CoRR
Sadhana Kumaravel, Tahira Naseem, Ramón Fernandez Astudillo, Radu Florian, Salim Roukos
2023 A* conf
EMNLP
Jon Saad-Falcon, Omar Khattab, Keshav Santhanam, Radu Florian, Martin Franz, Salim Roukos, Avirup Sil, Md. Arafat Sultan, Christopher Potts
2023 J jnl
CoRR
Jon Saad-Falcon, Omar Khattab, Keshav Santhanam, Radu Florian, Martin Franz, Salim Roukos, Avirup Sil, Md. Arafat Sultan, Christopher Potts
2022 J jnl
CoRR
Jian Ni, Gaetano Rossiello, Alfio Gliozzo, Radu Florian
2022 conf
NAACL-HLT
Tahira Naseem, Austin Blodgett, Sadhana Kumaravel, Tim O'Gorman, Young-Suk Lee, Jeffrey Flanigan, Ramón Fernandez Astudillo, Radu Florian, Salim Roukos, Nathan Schneider
2022 J jnl
IEEE Trans. Knowl. Data Eng.
Linfeng Song, Zhiguo Wang, Mo Yu, Yue Zhang, Radu Florian, Daniel Gildea
2022 J jnl
CoRR
J. Scott McCarley, Mihaela A. Bornea, Sara Rosenthal, Anthony Ferritto, Md. Arafat Sultan, Avirup Sil, Radu Florian
2022 conf
NAACL-HLT
Andrew Drozdov, Jiawei Zhou, Radu Florian, Andrew McCallum, Tahira Naseem, Yoon Kim, Ramón Fernandez Astudillo
2022 J jnl
CoRR
Andrew Drozdov, Jiawei Zhou, Radu Florian, Andrew McCallum, Tahira Naseem, Yoon Kim, Ramón Fernandez Astudillo
2022 conf
NAACL-HLT
Young-Suk Lee, Ramón Fernandez Astudillo, Hoang Thanh Lam, Tahira Naseem, Radu Florian, Salim Roukos
2022 J jnl
CoRR
Keshav Santhanam, Jon Saad-Falcon, Martin Franz, Omar Khattab, Avirup Sil, Radu Florian, Md. Arafat Sultan, Salim Roukos, Matei Zaharia, Christopher Potts
2022 A* conf
EMNLP
Md. Arafat Sultan, Avi Sil, Radu Florian
2022 J jnl
CoRR
Md. Arafat Sultan, Avirup Sil, Radu Florian
2022 J jnl
CoRR
Revanth Gangi Reddy, Bhavani Iyer, Md. Arafat Sultan, Rong Zhang, Avirup Sil, Vittorio Castelli, Radu Florian, Salim Roukos
2021 conf
NAACL-HLT
Jiawei Zhou, Tahira Naseem, Ramón Fernandez Astudillo, Radu Florian
2021 J jnl
CoRR
Jiawei Zhou, Tahira Naseem, Ramón Fernandez Astudillo, Radu Florian
2021 A conf
EACL
Janaki Sheth, Young-Suk Lee, Ramón Fernandez Astudillo, Tahira Naseem, Radu Florian, Salim Roukos, Todd Ward
2021 J jnl
CoRR
Janaki Sheth, Young-Suk Lee, Ramón Fernandez Astudillo, Tahira Naseem, Radu Florian, Salim Roukos, Todd Ward
2021 J jnl
CoRR
Sara Rosenthal, Mihaela A. Bornea, Avirup Sil, Radu Florian, J. Scott McCarley
2021 J jnl
CoRR
Tahira Naseem, Austin Blodgett, Sadhana Kumaravel, Tim O'Gorman, Young-Suk Lee, Jeffrey Flanigan, Ramón Fernandez Astudillo, Radu Florian, Salim Roukos, Nathan Schneider
2021 A* conf
AAAI
Nicolas R. Fauceglia, Mustafa Canim, Alfio Gliozzo, Jennifer J. Liang, Nancy Xin Ru Wang, Douglas Burdick, Nandana Mihindukulasooriya, Vittorio Castelli, Guy Feigenblat, David Konopnicki, Yannis Katsis, Radu Florian, Yunyao Li, Salim Roukos, Avirup Sil
2021 J jnl
CoRR
Mihaela A. Bornea, Ramón Fernandez Astudillo, Tahira Naseem, Nandana Mihindukulasooriya, Ibrahim Abdelaziz, Pavan Kapanipathi, Radu Florian, Salim Roukos
2021 J jnl
CoRR
Young-Suk Lee, Ramón Fernandez Astudillo, Thanh Lam Hoang, Tahira Naseem, Radu Florian, Salim Roukos
2021 A* conf
AAAI
Mihaela A. Bornea, Lin Pan, Sara Rosenthal, Radu Florian, Avirup Sil
2021 conf
EMNLP (1)
Jiawei Zhou, Tahira Naseem, Ramón Fernandez Astudillo, Young-Suk Lee, Radu Florian, Salim Roukos
2021 J jnl
CoRR
Jiawei Zhou, Tahira Naseem, Ramón Fernandez Astudillo, Young-Suk Lee, Radu Florian, Salim Roukos
2021 A* conf
SIGIR
Revanth Gangi Reddy, Bhavani Iyer, Md. Arafat Sultan, Rong Zhang, Avirup Sil, Vittorio Castelli, Radu Florian, Salim Roukos
2021 conf
ACL/IJCNLP (2)
Haoyang Wen, Anthony Ferritto, Heng Ji, Radu Florian, Avi Sil
2021 J jnl
CoRR
Haoyang Wen, Anthony Ferritto, Heng Ji, Radu Florian, Avirup Sil
2020 conf
COLING (Demonstrations)
Anthony Ferritto, Sara Rosenthal, Mihaela A. Bornea, Kazi Hasan, Rishav Chakravarti, Salim Roukos, Radu Florian, Avi Sil
2020 conf
EMNLP (Demos)
Anthony Ferritto, Lin Pan, Rishav Chakravarti, Salim Roukos, Radu Florian, J. William Murdock, Avirup Sil
2020 J jnl
CoRR
Parul Awasthy, Taesun Moon, Jian Ni, Radu Florian
2020 J jnl
CoRR
Jian Ni, Taesun Moon, Parul Awasthy, Radu Florian
2020 J jnl
CoRR
Revanth Gangi Reddy, Bhavani Iyer, Md. Arafat Sultan, Rong Zhang, Avi Sil, Vittorio Castelli, Radu Florian, Salim Roukos
2020 J jnl
CoRR
Parul Awasthy, Tahira Naseem, Jian Ni, Taesun Moon, Radu Florian
2020 A* conf
ACL
Manuel Mager, Ramón Fernandez Astudillo, Tahira Naseem, Md. Arafat Sultan, Young-Suk Lee, Radu Florian, Salim Roukos
2020 J jnl
CoRR
Manuel Mager, Ramón Fernandez Astudillo, Tahira Naseem, Md. Arafat Sultan, Young-Suk Lee, Radu Florian, Salim Roukos
2020 conf
EMNLP (1)
Rong Zhang, Revanth Gangi Reddy, Md. Arafat Sultan, Vittorio Castelli, Anthony Ferritto, Radu Florian, Efsun Sarioglu Kayi, Salim Roukos, Avirup Sil, Todd Ward
2020 J jnl
CoRR
Rong Zhang, Revanth Gangi Reddy, Md. Arafat Sultan, Vittorio Castelli, Anthony Ferritto, Radu Florian, Efsun Sarioglu Kayi, Salim Roukos, Avirup Sil, Todd Ward
2020 J jnl
CoRR
Mihaela A. Bornea, Lin Pan, Sara Rosenthal, Radu Florian, Avirup Sil
2020 conf
SustaiNLP@EMNLP
Parul Awasthy, Bishwaranjan Bhattacharjee, John R. Kender, Radu Florian
2020 conf
EMNLP (Findings)
Young-Suk Lee, Ramón Fernandez Astudillo, Tahira Naseem, Revanth Gangi Reddy, Radu Florian, Salim Roukos
2020 J jnl
CoRR
Young-Suk Lee, Ramón Fernandez Astudillo, Tahira Naseem, Revanth Gangi Reddy, Radu Florian, Salim Roukos
2020 conf
COLING (Industry)
Yousef El-Kurdi, Hiroshi Kanayama, Efsun Sarioglu Kayi, Vittorio Castelli, Todd Ward, Radu Florian
2020 A* conf
ACL
Vittorio Castelli, Rishav Chakravarti, Saswati Dana, Anthony Ferritto, Radu Florian, Martin Franz, Dinesh Garg, Dinesh Khandelwal, J. Scott McCarley, Mike McCawley, Mohamed Nasr, Lin Pan, Cezar Pendus, John F. Pitrelli, Saurabh Pujar, Salim Roukos, Andrzej Sakrajda, Avirup Sil, Rosario Uceda-Sosa, Todd Ward, Rong Zhang
2020 conf
COLING (Industry)
Rishav Chakravarti, Anthony Ferritto, Bhavani Iyer, Lin Pan, Radu Florian, Salim Roukos, Avi Sil
2020 conf
EMNLP (Findings)
Ramón Fernandez Astudillo, Miguel Ballesteros, Tahira Naseem, Austin Blodgett, Radu Florian
2020 J jnl
CoRR
Ramón Fernandez Astudillo, Miguel Ballesteros, Tahira Naseem, Austin Blodgett, Radu Florian
2019 conf
EMNLP/IJCNLP (3)
Rishav Chakravarti, Cezar Pendus, Andrzej Sakrajda, Anthony Ferritto, Lin Pan, Michael R. Glass, Vittorio Castelli, J. William Murdock, Radu Florian, Salim Roukos, Avirup Sil
2019 J jnl
CoRR
Rishav Chakravarti, Cezar Pendus, Andrzej Sakrajda, Anthony Ferritto, Lin Pan, Michael R. Glass, Vittorio Castelli, J. William Murdock, Radu Florian, Salim Roukos, Avirup Sil
2019 J jnl
CoRR
Anthony Ferritto, Lin Pan, Rishav Chakravarti, Salim Roukos, Radu Florian, J. William Murdock, Avirup Sil
2019 J jnl
CoRR
Lin Pan, Rishav Chakravarti, Anthony Ferritto, Michael R. Glass, Alfio Gliozzo, Salim Roukos, Radu Florian, Avirup Sil
2019 conf
TAC
Parul Awasthy, Taesun Moon, Jian Ni, Radu Florian
2019 conf
EMNLP/IJCNLP (1)
Jian Ni, Radu Florian
2019 J jnl
CoRR
Jian Ni, Radu Florian
2019 conf
ACL (1)
Tahira Naseem, Abhishek Shah, Hui Wan, Radu Florian, Salim Roukos, Miguel Ballesteros
2019 J jnl
CoRR
Tahira Naseem, Abhishek Shah, Hui Wan, Radu Florian, Salim Roukos, Miguel Ballesteros
2019 J jnl
CoRR
Vittorio Castelli, Rishav Chakravarti, Saswati Dana, Anthony Ferritto, Radu Florian, Martin Franz, Dinesh Garg, Dinesh Khandelwal, J. Scott McCarley, Mike McCawley, Mohamed Nasr, Lin Pan, Cezar Pendus, John F. Pitrelli, Saurabh Pujar, Salim Roukos, Andrzej Sakrajda, Avirup Sil, Rosario Uceda-Sosa, Todd Ward, Rong Zhang
2019 J jnl
CoRR
Taesun Moon, Parul Awasthy, Jian Ni, Radu Florian
2018 J jnl
CoRR
Linfeng Song, Zhiguo Wang, Mo Yu, Yue Zhang, Radu Florian, Daniel Gildea
2018 conf
ACL (2)
Gourab Kundu, Avirup Sil, Radu Florian, Wael Hamza
2018 J jnl
CoRR
Gourab Kundu, Avirup Sil, Radu Florian, Wael Hamza
2018 A* conf
AAAI
Avirup Sil, Gourab Kundu, Radu Florian, Wael Hamza
2017 A* conf
IJCAI
Zhiguo Wang, Wael Hamza, Radu Florian
2017 J jnl
CoRR
Zhiguo Wang, Wael Hamza, Radu Florian
2017 J jnl
CoRR
Jian Ni, Radu Florian
2017 A* conf
EMNLP
Lifu Huang, Avirup Sil, Heng Ji, Radu Florian
2017 J jnl
CoRR
Lifu Huang, Avirup Sil, Heng Ji, Radu Florian
2017 J jnl
CoRR
Avirup Sil, Gourab Kundu, Radu Florian, Wael Hamza
2017 J jnl
CoRR
Avirup Sil, Radu Florian
2017 J jnl
CoRR
Georgiana Dinu, Wael Hamza, Radu Florian
2017 conf
TAC
Avirup Sil, Georgiana Dinu, Gourab Kundu, Radu Florian
2017 conf
ACL (1)
Jian Ni, Georgiana Dinu, Radu Florian
2017 J jnl
CoRR
Jian Ni, Georgiana Dinu, Radu Florian
2016 J jnl
Trans. Assoc. Comput. Linguistics
Md. Arafat Sultan, Vittorio Castelli, Radu Florian
2016 J jnl
CoRR
Lu Wang, Hema Raghavan, Vittorio Castelli, Radu Florian, Claire Cardie
2016 A* conf
EMNLP
Jian Ni, Radu Florian
2016 J jnl
CoRR
Zhiguo Wang, Haitao Mi, Wael Hamza, Radu Florian
2016 conf
ACL (1)
Avirup Sil, Radu Florian
2016 conf
TAC
Avirup Sil, Georgiana Dinu, Radu Florian
2016 J jnl
CoRR
Thien Huu Nguyen, Avirup Sil, Georgiana Dinu, Radu Florian
2015 conf
MedInfo
Jian Ni, Brian Delaney, Radu Florian
2015 conf
TAC
Heng Ji, Joel Nothman, Ben Hachey, Radu Florian
2015 conf
BioNLP@IJCNLP
Ramesh Nallapati, Radu Florian
2015 conf
TAC
Avirup Sil, Georgiana Dinu, Radu Florian
2014 A* conf
WWW
Snigdha Chaturvedi, Vittorio Castelli, Radu Florian, Ramesh Nallapati, Hema Raghavan
2013 conf
ACL (1)
Lu Wang, Hema Raghavan, Vittorio Castelli, Radu Florian, Claire Cardie
2013 conf
HLT-NAACL
Xiaoqiang Luo, Hema Raghavan, Vittorio Castelli, Sameer Maskey, Radu Florian
2012 A* conf
SIGIR
Vittorio Castelli, Hema Raghavan, Radu Florian, Ding-Jung Han, Xiaoqiang Luo, Salim Roukos
2010 A* conf
EMNLP
Radu Florian, John F. Pitrelli, Salim Roukos, Imed Zitouni
2010 B conf
COLING
Rohit J. Kate, Xiaoqiang Luo, Siddharth Patwardhan, Martin Franz, Radu Florian, Raymond J. Mooney, Salim Roukos, Chris Welty
2010 J jnl
Inf. Process. Manag.
Jae-wook Ahn, Peter Brusilovsky, Jonathan Grady, Daqing He, Radu Florian
2010 conf
TAC
Vittorio Castelli, Radu Florian, Ding-Jung Han
2009 J jnl
IEEE Trans. Speech Audio Process.
Imed Zitouni, Xiaoqiang Luo, Radu Florian
2009 J jnl
ACM Trans. Asian Lang. Inf. Process.
Imed Zitouni, Radu Florian
2009 conf
TAC
Daniel M. Bikel, Vittorio Castelli, Radu Florian, Ding-Jung Han
2009 conf
HLT-NAACL (Short Papers)
Xiaoqiang Luo, Radu Florian, Todd Ward
2008 A* conf
EMNLP
Imed Zitouni, Radu Florian
2006 A* conf
ACL
Radu Florian, Hongyan Jing, Nanda Kambhatla, Imed Zitouni
2005 conf
SEMITIC@ACL
Imed Zitouni, Jeffrey Sorensen, Xiaoqiang Luo, Radu Florian
2004 conf
HLT-NAACL
Radu Florian, Hany Hassan, Abraham Ittycheriah, Hongyan Jing, Nanda Kambhatla, Xiaoqiang Luo, Nicolas Nicolov, Salim Roukos
2003 A* conf
EMNLP
Hongyan Jing, Radu Florian, Xiaoqiang Luo, Tong Zhang, Abraham Ittycheriah
2003 B conf
CoNLL
Radu Florian, Abraham Ittycheriah, Hongyan Jing, Tong Zhang
2003 conf
HLT-NAACL
Yaser Al-Onaizan, Radu Florian, Martin Franz, Hany Hassan, Young-Suk Lee, J. Scott McCarley, Kishore Papineni, Salim Roukos, Jeffrey S. Sorensen, Christoph Tillmann, Todd Ward, Fei Xia
2002 J jnl
Nat. Lang. Eng.
Radu Florian, Silviu Cucerzan, Charles Schafer, David Yarowsky
2002 J jnl
Nat. Lang. Eng.
David Yarowsky, Radu Florian
2002 A* conf
EMNLP
Radu Florian, David Yarowsky
2002 B conf
CoNLL
Radu Florian
2002 conf
SENSEVAL
Radu Florian, Richard Wicentowski
2001 J jnl
CoRR
Radu Florian, John C. Henderson, Grace Ngai
2001 J jnl
CoRR
Radu Florian, David Yarowsky
2001 J jnl
CoRR
Radu Florian, Grace Ngai
2001 B conf
CoNLL
Radu Florian, Grace Ngai
2001 conf
SENSEVAL@ACL
David Yarowsky, Silviu Cucerzan, Radu Florian, Charles Schafer, Richard Wicentowski
2001 A conf
NAACL
Grace Ngai, Radu Florian
2001 J jnl
CoRR
Grace Ngai, Radu Florian
2000 A* conf
EMNLP
Radu Florian, John C. Henderson, Grace Ngai
1999 A* conf
ACL
Radu Florian, David Yarowsky
1999 A* conf
EMNLP
David Yarowsky, Radu Florian
1998 conf
COLING-ACL
Eric Brill, Radu Florian, John C. Henderson, Lidia Mangu
redb/extractors/decompiler/DecompileAPK.py
← Index redb/extractors/decompiler/DecompileAPK.py python
"""APK Code Analysis Extractor.

Decompiles and disassembles APK DEX bytecode at the method level,
producing per-method content and reference records analogous to
the Binary Ninja code_binja_* tables.

Uses androguard + JADX + apktool to replicate Binary Ninja analysis
depth for Android applications.
"""

import gc
import hashlib
import inspect
import logging
import os
import threading
import time
from datetime import datetime, timezone
from typing import Any, Dict, Optional

from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
from redb.extractors.enum import Tag
from redb.extractors.extractor import Extractor


class DecompileAPK(Extractor):
    """APK code analysis extractor — produces multi-table ClickHouse export.

    Follows the same pattern as DecompileBinja for consistency.
    """

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        known_benign=False,
        known_malicious=False,
        filetype=None,
        decompile_modules=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            known_benign=known_benign,
            known_malicious=known_malicious,
        )
        self.log.debug(inspect.currentframe().f_code.co_name)
        self.analysis_results = None
        self.analyzer = None
        self.filetype = filetype or "apk"
        self.decompile_modules = decompile_modules or {"all"}

        try:
            self.APK_DECOMPILE_TIMEOUT = int(
                os.getenv("APK_DECOMPILE_TIMEOUT", "600")
            )
        except ValueError:
            self.log.warning(
                "Invalid APK_DECOMPILE_TIMEOUT value, using default of 600 seconds"
            )
            self.APK_DECOMPILE_TIMEOUT = 600

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.cleanup_run()

    def calculate_md5(self, input_str):
        """Calculate MD5 hash of a string."""
        return hashlib.md5(input_str.encode("utf-8")).hexdigest()

    def cleanup_run(self):
        """Clean up after analysis."""
        try:
            if self.analyzer:
                self.analyzer.cleanup()
                self.analyzer = None
            gc.collect()
        except Exception as e:
            self.log.error(f"Error in cleanup: {e}")

    def analyze_apk(self) -> Optional[Dict[str, Any]]:
        """Run APK code analysis and return results."""
        self.log.debug("Starting APK code analysis")
        try:
            self.analyzer = APKCodeAnalyzer(
                filepath=self.filepath,
                timeout=self.APK_DECOMPILE_TIMEOUT,
                log=self.log,
                decompile_modules=self.decompile_modules,
            )
            results = self.analyzer.extract()
            return results
        except Exception as e:
            self.log.error(f"Error in APK code analysis: {e}")
            import traceback
            self.log.error(f"Traceback: {traceback.format_exc()}")
            return None
        finally:
            self.cleanup_run()

    def extract(self):
        """Extract and process all analysis results.

        Uses daemon thread with timeout, same pattern as DecompileBinja.
        """
        self.log.debug(inspect.currentframe().f_code.co_name)

        extraction_completed = False
        extraction_result = False
        extraction_error = None

        def do_extraction():
            nonlocal extraction_completed, extraction_result, extraction_error
            try:
                results = self.analyze_apk()
                if not results:
                    extraction_result = False
                else:
                    self.analysis_results = results
                    self.analysis_results["sha256"] = self.sha256
                    self.analysis_results["sha1"] = self.sha1
                    self.analysis_results["md5"] = self.md5
                    extraction_result = True
            except Exception as e:
                extraction_error = e
                extraction_result = False
            finally:
                extraction_completed = True

        extraction_thread = threading.Thread(target=do_extraction)
        extraction_thread.daemon = True
        extraction_thread.start()

        start_time = time.time()
        while (
            not extraction_completed
            and (time.time() - start_time) < self.APK_DECOMPILE_TIMEOUT
        ):
            time.sleep(1)

        if not extraction_completed:
            self.log.error(
                f"APK extraction timed out after {self.APK_DECOMPILE_TIMEOUT} seconds"
            )
            self.cleanup_run()
            return None

        if extraction_error:
            self.log.error(f"Error in APK extraction: {extraction_error}")
            return None

        return self.analysis_results if extraction_result else None

    def prepare_export_data(self, exporter_type: str) -> Any:
        """Prepare data for database export."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        if not self.analysis_results:
            return None

        if exporter_type == "ClickHouseExporter":
            now = datetime.now(timezone.utc)
            export = {"multi_table": True}

            # Table 1: Decompiled method content
            if self.analysis_results.get("decompiled_content"):
                export["decompiled_content"] = {
                    "table": "code_apk_decompiled_methods_content",
                    "data": [
                        [
                            f["decompiled_method_hash"],
                            f["decompiled_method"],
                            f.get("decompiled_method_type", "UNKNOWN"),
                            1 if f.get("decompiled_has_string_encryption") else 0,
                            1 if f.get("decompiled_has_reflection_calls") else 0,
                            1 if f.get("decompiled_excessive_goto_count") else 0,
                            now,
                        ]
                        for f in self.analysis_results["decompiled_content"]
                    ],
                    "column_names": [
                        "decompiled_method_hash",
                        "decompiled_method",
                        "decompiled_method_type",
                        "decompiled_has_string_encryption",
                        "decompiled_has_reflection_calls",
                        "decompiled_excessive_goto_count",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "String",
                        "Enum8('USER'=1, 'LIBRARY'=2, 'UNKNOWN'=5)",
                        "UInt8",
                        "UInt8",
                        "UInt8",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 2: Decompiled method references
            if self.analysis_results.get("decompiled_refs"):
                export["decompiled_refs"] = {
                    "table": "code_apk_decompiled_methods_references",
                    "data": [
                        [
                            self.analysis_results["sha256"],
                            f["decompiled_method_hash"],
                            f.get("smali_method_hash"),
                            f.get("decompiled_class_name", ""),
                            f.get("decompiled_method_name", ""),
                            f.get("decompiled_method_signature", ""),
                            f.get("decompiled_method_prototype", ""),
                            f.get("functions_caller", []),
                            f.get("functions_call", []),
                            now,
                        ]
                        for f in self.analysis_results["decompiled_refs"]
                    ],
                    "column_names": [
                        "sha256",
                        "decompiled_method_hash",
                        "smali_method_hash",
                        "decompiled_class_name",
                        "decompiled_method_name",
                        "decompiled_method_signature",
                        "decompiled_method_prototype",
                        "functions_caller",
                        "functions_call",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "FixedString(64)",
                        "Nullable(FixedString(64))",
                        "LowCardinality(String)",
                        "LowCardinality(String)",
                        "String",
                        "String",
                        "Array(String)",
                        "Array(String)",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 3: Smali method content
            if self.analysis_results.get("smali_content"):
                export["smali_content"] = {
                    "table": "code_apk_smali_methods_content",
                    "data": [
                        [
                            f["smali_method_hash"],
                            f["smali_method"],
                            f.get("smali_method_type", "UNKNOWN"),
                            f.get("smali_instructions_count", 0),
                            f.get("smali_register_count", 0),
                            1 if f.get("smali_has_string_encryption") else 0,
                            1 if f.get("smali_has_reflection_calls") else 0,
                            1 if f.get("smali_excessive_goto_count") else 0,
                            f.get("smali_flattened_score", 0.0),
                            f.get("smali_mba_score", 0.0),
                            now,
                        ]
                        for f in self.analysis_results["smali_content"]
                    ],
                    "column_names": [
                        "smali_method_hash",
                        "smali_method",
                        "smali_method_type",
                        "smali_instructions_count",
                        "smali_register_count",
                        "smali_has_string_encryption",
                        "smali_has_reflection_calls",
                        "smali_excessive_goto_count",
                        "smali_flattened_score",
                        "smali_mba_score",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "String",
                        "Enum8('USER'=1, 'LIBRARY'=2, 'UNKNOWN'=5)",
                        "UInt32",
                        "UInt16",
                        "UInt8",
                        "UInt8",
                        "UInt8",
                        "Float64",
                        "Float64",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 4: Smali method references
            if self.analysis_results.get("smali_refs"):
                export["smali_refs"] = {
                    "table": "code_apk_smali_methods_references",
                    "data": [
                        [
                            self.analysis_results["sha256"],
                            f["smali_method_hash"],
                            f.get("decompiled_method_hash"),
                            f.get("smali_class_name", ""),
                            f.get("smali_method_name", ""),
                            f.get("smali_method_signature", ""),
                            now,
                        ]
                        for f in self.analysis_results["smali_refs"]
                    ],
                    "column_names": [
                        "sha256",
                        "smali_method_hash",
                        "decompiled_method_hash",
                        "smali_class_name",
                        "smali_method_name",
                        "smali_method_signature",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "FixedString(64)",
                        "Nullable(FixedString(64))",
                        "LowCardinality(String)",
                        "LowCardinality(String)",
                        "String",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 5: Method similarity metrics (content-based fuzzy matching)
            if self.analysis_results.get("similarity_metrics"):
                export["method_similarity_metrics"] = {
                    "table": "code_apk_method_similarity_metrics",
                    "data": [
                        [
                            f["smali_method_hash"],
                            f.get("ssdeep_smali"),
                            f.get("tlsh_smali"),
                            f.get("ssdeep_smali_normalized"),
                            f.get("tlsh_smali_normalized"),
                            f.get("minhash", []),
                            now,
                        ]
                        for f in self.analysis_results["similarity_metrics"]
                    ],
                    "column_names": [
                        "smali_method_hash",
                        "ssdeep_smali",
                        "tlsh_smali",
                        "ssdeep_smali_normalized",
                        "tlsh_smali_normalized",
                        "minhash",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "Nullable(String)",
                        "Nullable(FixedString(72))",
                        "Nullable(String)",
                        "Nullable(FixedString(72))",
                        "Array(UInt8)",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 5b: CFG method features (structural/topological)
            if self.analysis_results.get("cfg"):
                export["cfg_methods"] = {
                    "table": "code_apk_cfg_methods",
                    "data": [
                        [
                            cfg["smali_method_hash"],
                            cfg["cfg_topology_hash"],
                            cfg["block_count"],
                            cfg["edge_count"],
                            cfg.get("cfg_instructions_count", 0),
                            cfg.get("call_count", 0),
                            cfg["cyclomatic_complexity"],
                            cfg.get("loop_count", 0),
                            cfg.get("max_depth", 0),
                            cfg.get("max_fan_out", 0),
                            cfg.get("md_index_topdown", 0),
                            cfg.get("md_index_bottomup", 0),
                            cfg.get("prime_product_smali", 0),
                            cfg.get("cfg_feature_tlsh"),
                            cfg.get("wl_minhash", []),
                            cfg.get("bb_features", []),
                            cfg.get("cfg_adjacency", []),
                            now,
                        ]
                        for cfg in self.analysis_results["cfg"]
                        if cfg is not None
                    ],
                    "column_names": [
                        "smali_method_hash",
                        "cfg_topology_hash",
                        "block_count",
                        "edge_count",
                        "cfg_instructions_count",
                        "call_count",
                        "cyclomatic_complexity",
                        "loop_count",
                        "max_depth",
                        "max_fan_out",
                        "md_index_topdown",
                        "md_index_bottomup",
                        "prime_product_smali",
                        "cfg_feature_tlsh",
                        "wl_minhash",
                        "bb_features",
                        "cfg_adjacency",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "FixedString(16)",
                        "UInt16",
                        "UInt16",
                        "UInt32",
                        "UInt16",
                        "UInt16",
                        "UInt16",
                        "UInt16",
                        "UInt16",
                        "UInt64",
                        "UInt64",
                        "UInt64",
                        "Nullable(FixedString(72))",
                        "Array(UInt8)",
                        "Array(Array(UInt16))",
                        "Array(UInt32)",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            # Table 6: Strings — reuse code_binja_strings_raw for cross-format correlation
            # DEX strings are MUTF-8; string_raw = string since no encoding difference
            if self.analysis_results.get("strings"):
                export["strings_raw"] = {
                    "table": "code_binja_strings_raw",
                    "data": [
                        [
                            self.analysis_results["sha256"],
                            s["string"],
                            s["string"],  # string_raw = string (MUTF-8 decoded to UTF-8)
                            s.get("string_encoding", "UTF8"),
                            s.get("string_offset", 0),
                            s.get("string_length", len(s["string"])),
                            s.get("string_length", len(s["string"])),  # string_raw_length = string_length
                            s.get("string_entropy", 0.0),
                        ]
                        for s in self.analysis_results["strings"]
                    ],
                    "column_names": [
                        "sha256",
                        "string",
                        "string_raw",
                        "string_encoding",
                        "string_offset",
                        "string_length",
                        "string_raw_length",
                        "string_entropy",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "String",
                        "String",
                        "LowCardinality(String)",
                        "UInt64",
                        "UInt32",
                        "UInt32",
                        "Float32",
                    ],
                }

            # Table 7: Analysis errors
            if self.analysis_results.get("analysis_errors"):
                export["analysis_errors"] = {
                    "table": "code_apk_analysis_errors",
                    "data": [
                        [
                            self.analysis_results["sha256"],
                            f.get("class_name"),
                            f.get("method_name"),
                            f.get("error_location", "unknown"),
                            f.get("error_message", ""),
                            f.get("error_type", "unknown"),
                            self.calculate_md5(
                                f"{f.get('error_message', '')}"
                                f"{f.get('class_name', '')}"
                                f"{f.get('method_name', '')}"
                                f"{f.get('error_location', 'unknown')}"
                            ),
                            "new",
                            now,
                        ]
                        for f in self.analysis_results["analysis_errors"]
                    ],
                    "column_names": [
                        "sha256",
                        "class_name",
                        "method_name",
                        "error_location",
                        "error_message",
                        "error_type",
                        "error_hash",
                        "status",
                        "analysis_date",
                    ],
                    "column_type_names": [
                        "FixedString(64)",
                        "Nullable(String)",
                        "Nullable(String)",
                        "LowCardinality(String)",
                        "Nullable(String)",
                        "Nullable(String)",
                        "FixedString(32)",
                        "Enum8('new'=1, 'investigating'=2, 'fixed'=3, 'wontfix'=4)",
                        "DateTime64(3, 'UTC')",
                    ],
                }

            return export

        return None

    def tag(self) -> str:
        """Return the tag for this extractor."""
        return Tag.APK_DECOMPILED.value

    def get_clickhouse_table(self) -> str:
        """Not used directly as we're handling multiple tables."""
        pass