1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 poetry-core,
6 apkinspector,
7 networkx,
8 pygments,
9 lxml,
10 colorama,
11 cryptography,
12 dataset,
13 frida-python,
14 loguru,
15 matplotlib,
16 asn1crypto,
17 click,
18 mutf8,
19 pyyaml,
20 pydot,
21 ipython,
22 oscrypto,
23 pyqt5,
24 pytestCheckHook,
25 python-magic,
26 qt5,
27 # This is usually used as a library, and it'd be a shame to force the GUI
28 # libraries to the closure if GUI is not desired.
29 withGui ? false,
30 # Deprecated in 24.11.
31 doCheck ? true,
32}:
33
34assert lib.warnIf (!doCheck) "python3Packages.androguard: doCheck is deprecated" true;
35
36buildPythonPackage rec {
37 pname = "androguard";
38 version = "4.1.3";
39 pyproject = true;
40
41 src = fetchFromGitHub {
42 repo = "androguard";
43 owner = "androguard";
44 tag = "v${version}";
45 sha256 = "sha256-qz6x7UgYXal1DbQGzi4iKnSGEn873rKibKme/pF7tLk=";
46 };
47
48 build-system = [
49 poetry-core
50 ];
51
52 nativeBuildInputs = lib.optionals withGui [ qt5.wrapQtAppsHook ];
53
54 dependencies = [
55 apkinspector
56 asn1crypto
57 click
58 colorama
59 cryptography
60 dataset
61 frida-python
62 ipython
63 loguru
64 lxml
65 matplotlib
66 mutf8
67 networkx
68 oscrypto
69 pydot
70 pygments
71 pyyaml
72 ]
73 ++ networkx.optional-dependencies.default
74 ++ networkx.optional-dependencies.extra
75 ++ lib.optionals withGui [
76 pyqt5
77 ];
78
79 nativeCheckInputs = [
80 pytestCheckHook
81 pyqt5
82 python-magic
83 ];
84
85 # If it won't be verbose, you'll see nothing going on for a long time.
86 pytestFlags = [ "--verbose" ];
87
88 preFixup = lib.optionalString withGui ''
89 makeWrapperArgs+=("''${qtWrapperArgs[@]}")
90 '';
91
92 meta = {
93 description = "Tool and Python library to interact with Android Files";
94 homepage = "https://github.com/androguard/androguard";
95 license = lib.licenses.asl20;
96 maintainers = with lib.maintainers; [ pmiddend ];
97 };
98}