Magnus Bergquist

35 papers C 1Misc 2Journal 9Unranked 23
YearRankTypeTitle / Venue / Authors
2025 conf
AMCIS
Ahmad Ghazawneh, Collins Senyemi, Magnus Bergquist
2024 conf
HICSS
Abid Ali Fareedi, Ahmad Ghazawneh, Magnus Bergquist
2023 conf
TEXT2KG/BiKE@ESWC
Abid Ali Fareedi, Muhammad Ismail, Ahmad Ghazawneh, Magnus Bergquist, Fernando Ortiz-Rodríguez
2022 J jnl
Int. J. Inf. Manag.
Pär J. Ågerfalk, Karin Axelsson, Magnus Bergquist
2022 C conf
SEKE
Enayat Rajabi, Slawomir Nowaczyk, Sepideh Pashami, Magnus Bergquist
2022 conf
HICSS
Dulce Gonçalves, Magnus Bergquist
2022 conf
HICSS
Lena Hylving, Annie Rydström, Magnus Bergquist
2021 conf
CENTERIS/ProjMAN/HCist
Dulce Gonçalves, Magnus Bergquist, Sverker Alänge, Richard Bunk
2021 conf
ECIS
Dulce Gonçalves, Magnus Bergquist, Sverker Alänge, Richard Bunk
2020 J jnl
Inf. Syst. Frontiers
Bendik Bygstad, Egil Øvrelid, Thomas Lie, Magnus Bergquist
2019 J jnl
Scand. J. Inf. Syst.
Thomas Lindgren, Vaike Fors, Sarah Pink, Magnus Bergquist
2019 conf
AMCIS
Dulce Gonçalves, Magnus Bergquist, Richard Bunk, Sverker Alänge
2018 conf
SCIS
Thomas Lindgren, Magnus Bergquist, Sarah Pink, Martin Berg, Vaike Fors
2018 conf
HICSS
Bendik Bygstad, Magnus Bergquist
2018 Misc conf
NordiCHI
Thomas Lindgren, Vaike Fors, Sarah Pink, Magnus Bergquist, Martin Berg
2018 J jnl
Scand. J. Inf. Syst.
Magnus Bergquist, Helle Zinner Henriksen, Arto Ojala, Polyxeni Vassilakopoulou
2018 conf
ACIS
Ahmad Ghazawneh, Osama Mansour, Magnus Bergquist
2017 J jnl
Int. J. Hum. Comput. Interact.
Susanne Lindberg, Petra Svedberg, Magnus Bergquist, Jens Nygren
2017 conf
ECIS
Magnus Bergquist, Jan Ljungberg, Bjorn Remneland, Bertil Rolandsson
2016 conf
MCIS
Esbjörn Ebbesson, Magnus Bergquist
2014 conf
HICSS
Soumitra Chowdhury, Magnus Bergquist, Maria Åkesson
2014 conf
AMCIS
Esbjörn Ebbesson, Magnus Bergquist
2014 conf
HICSS
Asif Akram, Magnus Bergquist, Maria Åkesson
2013 conf
ECIS
Magnus Bergquist, Jan Ljungberg, Fahd Omair Zaffar, Dick Stenmark
2012 conf
ECIS
Magnus Bergquist, Jan Ljungberg, Bertil Rolandsson
2011 conf
OSS
Magnus Bergquist, Jan Ljungberg, Bertil Rolandsson
2010 J jnl
Comput. Educ.
Tomas Lindroth, Magnus Bergquist
2009 conf
HICSS
Carina Ihlström Eriksson, Maria Åkesson, Magnus Bergquist, Jan Ljungberg
2008 Misc conf
NordiCHI
Tomas Lindroth, Magnus Bergquist
2003 conf
Information Systems Perspectives and Challenges in the Context of Globalization
Joseph Feller, Brian Fitzgerald, Jan Ljungberg, Magnus Bergquist
2001 J jnl
J. Inf. Technol.
Magnus Bergquist, Jan Ljungberg, Ulrika Lundh Snis
2001 conf
ECIS
Rikard Lindgren, Dick Stenmark, Magnus Bergquist, Jan Ljungberg
2001 J jnl
Inf. Syst. J.
Magnus Bergquist, Jan Ljungberg
1999 J jnl
AI Soc.
Magnus Bergquist, Magnus Mörck
1999 conf
HICSS
Magnus Bergquist, Jan Ljungberg
redb/extractors/decompiler/apk/library_filter.py
← Index redb/extractors/decompiler/apk/library_filter.py python
"""Package-based library filtering for APK DEX code analysis.

Determines whether a method belongs to a known library/framework package
and should be filtered out of content tables. This is the Android equivalent
of is_lib_or_thunk() in the Binary Ninja pipeline.
"""

import os
from typing import Dict, List


DEFAULT_LIBRARY_PREFIXES = [
    "android.",
    "androidx.",
    "com.google.android.",
    "com.google.firebase.",
    "com.google.gson.",
    "com.google.protobuf.",
    "kotlin.",
    "kotlinx.",
    "org.apache.",
    "com.squareup.",
    "io.reactivex.",
    "org.reactivestreams.",
    "com.facebook.",
    "com.crashlytics.",
    "io.fabric.",
    "org.junit.",
    "org.mockito.",
]


class LibraryFilter:
    """Filters library/framework classes from APK analysis."""

    def __init__(self, prefixes: List[str] = None):
        env_prefixes = os.getenv("APK_LIBRARY_PREFIXES")
        if env_prefixes:
            self._prefixes = [p.strip() for p in env_prefixes.split(",") if p.strip()]
        elif prefixes is not None:
            self._prefixes = prefixes
        else:
            self._prefixes = DEFAULT_LIBRARY_PREFIXES

        # Convert Dalvik-style prefixes to both formats for matching
        self._dot_prefixes = tuple(self._prefixes)

        self._stats = {"library": 0, "user": 0}

    def is_library(self, class_name: str) -> bool:
        """Check if a class belongs to a known library/framework package.

        Accepts both Java dot notation (com.example.Foo) and Dalvik
        descriptor notation (Lcom/example/Foo;).
        """
        # Normalize Dalvik descriptor to dot notation
        normalized = self._normalize_class_name(class_name)

        is_lib = normalized.startswith(self._dot_prefixes)
        if is_lib:
            self._stats["library"] += 1
        else:
            self._stats["user"] += 1
        return is_lib

    def get_filter_stats(self) -> Dict[str, int]:
        """Return counts of filtered vs. retained classes."""
        return dict(self._stats)

    @staticmethod
    def _normalize_class_name(class_name: str) -> str:
        """Convert Dalvik descriptor to dot notation.

        Lcom/example/Foo; -> com.example.Foo
        com.example.Foo -> com.example.Foo
        """
        if class_name.startswith("L") and class_name.endswith(";"):
            return class_name[1:-1].replace("/", ".")
        return class_name.replace("/", ".")