;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; Copyright © 2017 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module (gnu packages)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages docker)
+ #:use-module (gnu packages gcc)
#:use-module (gnu packages gnupg)
+ #:use-module (gnu packages java)
+ #:use-module (gnu packages linux)
#:use-module (gnu packages pcre)
#:use-module (gnu packages python)
+ #:use-module (gnu packages python-crypto)
+ #:use-module (gnu packages python-web)
+ #:use-module (gnu packages python-xyz)
#:use-module (gnu packages selinux)
+ #:use-module (gnu packages serialization)
#:use-module (gnu packages ssh)
- #:use-module (gnu packages version-control)
#:use-module (gnu packages tls)
- #:use-module (gnu packages linux))
+ #:use-module (gnu packages version-control)
+ #:use-module (gnu packages virtualization)
+ #:use-module (gnu packages xdisorg)
+ #:use-module (gnu packages xml))
(define-public android-make-stub
(package
(define-public android-googletest
(package (inherit googletest)
(name "android-googletest")
+ (version "1.8.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/google/googletest.git")
+ (commit (string-append "release-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0bjlljmbf8glnd9qjabx73w6pd7ibv43yiyngqvmvgxsabzr8399"))))
(arguments
`(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")
#:phases
;; Big thanks to them for laying the groundwork.
;; The version tag is consistent between all repositories.
-(define (android-platform-version) "7.1.2_r6")
+(define (android-platform-version) "7.1.2_r36")
(define (android-platform-system-core version)
(origin
version "-checkout"))
(sha256
(base32
- "0xc2n7jxrf1iw9cc278pijdfjix2fkiig5ws27f6rwp40zg5mrgg"))
+ "1krnc2b9zfkzpdgs1dcbji59nszlx2qr723pg89m52622czc06hg"))
(patches
(search-patches "libbase-use-own-logging.patch"
"libbase-fix-includes.patch"
version "-checkout"))
(sha256
(base32
- "0n9wkz3ynqw39if1ss9n32m66iga14nndf29hpm7g1aqn4wvvgzk"))))
+ "15r4s20d7vw022f8vrc3jbghmqwdcqzprl7i2bfvdkz8z76wc1ps"))))
(define (android-platform-external version subdirectory checksum)
(origin
(build-system android-ndk-build-system)
(arguments
`(#:tests? #f ; Test failure: logging.UNIMPLEMENTED
- #:make-flags '("CXXFLAGS=-std=gnu++11")
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'enter-source
"CC = gcc\n"
"CFLAGS += -fPIC\n"
- "CXXFLAGS += -std=gnu++11 -fPIC\n"
+ "CXXFLAGS += -fPIC\n"
"CPPFLAGS += -Iinclude -I../include\n"
"LDFLAGS += -shared -Wl,-soname,$(NAME).so.0\n"
(build-system android-ndk-build-system)
(arguments
`(#:make-flags '("CFLAGS=-Wno-error"
- "CXXFLAGS=-fpermissive -Wno-error -std=gnu++11")
+ "CXXFLAGS=-fpermissive -Wno-error")
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'enter-source
(modify-phases %standard-phases
(add-after 'unpack 'enter-source
(lambda _ (chdir "adb") #t))
+ (add-after 'enter-source 'glibc-compat
+ (lambda _
+ ;; Include sysmacros.h for "major" and "minor" in Glibc 2.28.
+ (substitute* "usb_linux.cpp"
+ (("#include <sys/types.h>" all)
+ (string-append all "\n#include <sys/sysmacros.h>\n")))
+ #t))
(add-after 'enter-source 'make-libs-available
(lambda* (#:key inputs outputs #:allow-other-keys)
(substitute* "Android.mk"
`(("android-libbase" ,android-libbase)
("android-libcutils" ,android-libcutils)
("android-liblog" ,android-liblog)
- ("openssl" ,openssl)))
+ ("openssl" ,openssl-1.0)))
(home-page "https://developer.android.com/studio/command-line/adb.html")
(synopsis "Android Debug Bridge")
(description
;; pcre is inlined by our package.
("pcre" ,pcre)))
(home-page "https://developer.android.com/")
- (synopsis (package-synopsis libselinux))
- (description (package-description libselinux))
- (license (package-license libselinux))))
+ (synopsis "Android version of the SELinux libraries and utilities")
+ (description
+ "The libselinux library provides an API for SELinux applications to get
+and set process and file security contexts, and to obtain security policy
+decisions. It is required for any applications that use the SELinux API, and
+used by all applications that are SELinux-aware. This package also includes
+the core SELinux management utilities.")
+ (license license:public-domain)))
(define-public android-ext4-utils
(package
(native-inputs
`(("android-core" ,(android-platform-system-core version))))
(home-page "https://developer.android.com/")
- (synopsis "Android ext4 filesystem utils")
+ (synopsis "Android ext4 file system utilities")
(description "@code{android-ext4-utils} is a library in common use by the
Android core.")
(license license:asl2.0)))
("android-libcutils" ,android-libcutils)))
(native-inputs
`(("android-bionic-uapi" ,android-bionic-uapi)
- ("android-liblog" ,android-liblog)))
+ ("android-liblog" ,android-liblog)
+ ("gcc" ,gcc-5))) ; XXX: fails to build with GCC 7
(home-page "https://developer.android.com/")
(synopsis "Android utility library")
(description "@code{android-libutils} provides utilities for Android NDK developers.")
(source (android-platform-system-core version))
(build-system android-ndk-build-system)
(arguments
- `(#:make-flags (list "CXXFLAGS=-std=gnu++11")
- #:phases
+ `(#:phases
(modify-phases %standard-phases
(add-after 'unpack 'enter-source
(lambda _
(define-public android-udev-rules
(package
(name "android-udev-rules")
- (version "20180112")
+ (version "20191103")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/M0Rf30/android-udev-rules")
(commit version)))
- (file-name (string-append name "-" version "-checkout"))
+ (file-name (git-file-name name version))
(sha256
- (base32 "13gj79nnd04szqlrrzzkdr6wi1fky08pi7x8xfbg0jj3d3v0giah"))))
+ (base32 "0x2f2sv0x0ry7kccp47s0hlxps3hbpg37dj3xjjgpdm5hmn2cjq3"))))
(build-system trivial-build-system)
(native-inputs `(("source" ,source)))
(arguments
(use-modules (guix build utils))
(let ((source (assoc-ref %build-inputs "source")))
(install-file (string-append source "/51-android.rules")
- (string-append %output "/lib/udev/rules.d"))))))
+ (string-append %output "/lib/udev/rules.d"))
+ #t))))
(home-page "https://github.com/M0Rf30/android-udev-rules")
(synopsis "udev rules for Android devices")
(description "Provides a set of udev rules to allow using Android devices
(delete 'build) ; nothing to build
(replace 'check
(lambda _
- (zero? (system* "python" "-m" "nose"))))
+ (invoke "python" "-m" "nose")))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(install-file "abootimg" bin)
#t))))))
(inputs
- `(("libblkid" ,util-linux)))
+ `(("libblkid" ,util-linux "lib")))
(home-page "https://ac100.grandou.net/abootimg")
(synopsis "Tool for manipulating Android Boot Images")
(description "This package provides a tool for manipulating old Android
Boot Images. @code{abootimg} can work directly on block devices, or, the
safest way, on a file image.")
(license license:gpl2+)))
+
+(define-public python-androguard
+ (package
+ (name "python-androguard")
+ (version "3.2.1")
+ (source
+ (origin
+ ;; The pypi release doesn't have the tests, but the tests use
+ ;; packaged binaries, so we skip them.
+ (method url-fetch)
+ (uri (pypi-uri "androguard" version))
+ (sha256
+ (base32
+ "0ndsw00pkyda4i2s3wi5ap8gbk6a9d23xhhxpdbk02padv8sxkfv"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ ;; Adapted from .travis.yml
+ (lambda _
+ (invoke "nosetests" "--with-coverage" "--with-timer"
+ "--timer-top-n" "50"))))))
+ (native-inputs
+ `(("python-codecov" ,python-codecov)
+ ("python-coverage" ,python-coverage)
+ ("python-mock" ,python-mock)
+ ("python-nose" ,python-nose)
+ ("python-nose-timer" ,python-nose-timer)))
+ (propagated-inputs
+ `(("python-asn1crypto" ,python-asn1crypto)
+ ("python-colorama" ,python-colorama)
+ ("python-future" ,python-future)
+ ("python-ipython" ,python-ipython)
+ ("python-lxml" ,python-lxml)
+ ("python-matplotlib" ,python-matplotlib)
+ ("python-networkx" ,python-networkx)
+ ("python-pygments" ,python-pygments)
+ ("python-pyperclip" ,python-pyperclip)))
+ (home-page "https://github.com/androguard/androguard")
+ (synopsis "Python tool to play with Android files")
+ (description
+ "Androguard is a full Python tool to manipulate Android files. It is
+useful for reverse engineering, analysis of Android applications and more.")
+ (license license:asl2.0)))
+
+(define-public fdroidserver
+ (package
+ (name "fdroidserver")
+ (version "1.1.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "fdroidserver" version))
+ (sha256
+ (base32
+ "0fp7q8faicx6i6wxm717qqaham3jpilb23mvynpz6v73z7hm6wcg"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-versioning
+ (lambda _
+ (substitute* "setup.py"
+ (("0.2.1") ,(package-version python-pyasn1-modules)))
+ #t)))))
+ (propagated-inputs
+ `(("python-androguard" ,python-androguard)
+ ("python-apache-libcloud" ,python-apache-libcloud)
+ ("python-clint" ,python-clint)
+ ("python-defusedxml" ,python-defusedxml)
+ ("python-docker-py" ,python-docker-py)
+ ("python-gitpython" ,python-gitpython)
+ ("python-mwclient" ,python-mwclient)
+ ("python-paramiko" ,python-paramiko)
+ ("python-pillow" ,python-pillow)
+ ("python-pyasn1" ,python-pyasn1)
+ ("python-pyasn1-modules" ,python-pyasn1-modules)
+ ("python-pyyaml" ,python-pyyaml)
+ ("python-qrcode" ,python-qrcode)
+ ("python-ruamel.yaml" ,python-ruamel.yaml)
+ ("python-requests" ,python-requests)
+ ("python-vagrant" ,python-vagrant)))
+ (native-inputs
+ `(("python-babel" ,python-babel)
+ ("python-bcrypt" ,python-bcrypt)
+ ("python-docker-pycreds" ,python-docker-pycreds)
+ ("python-pynacl" ,python-pynacl)
+ ("python-websocket-client" ,python-websocket-client)))
+ (home-page "https://f-droid.org")
+ (synopsis "F-Droid server tools")
+ (description
+ "The F-Droid server tools provide various scripts and tools that are used
+to maintain F-Droid, the repository of free Android applications. You can use
+these same tools to create your own additional or alternative repository for
+publishing, or to assist in creating, testing and submitting metadata to the
+main repository.")
+ (license license:agpl3+)))
+
+(define-public enjarify
+ (package
+ (name "enjarify")
+ (version "1.0.3")
+ (home-page "https://github.com/Storyyeller/enjarify")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url home-page)
+ (commit version)))
+ (file-name (git-file-name name version))
+ (patches
+ (search-patches "enjarify-setup-py.patch"))
+ (sha256
+ (base32
+ "1nam7h1g4f1h6jla4qcjjagnyvd24dv6d5445w04q8hx07nxdapk"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'enjarify-wrapper-inherit-pythonpath
+ ;; enjarify sets PYTHONPATH from a shell script, overwriting
+ ;; PYTHONPATH set from guix. Comment out this line.
+ (lambda _
+ (substitute* "enjarify.sh"
+ (("export PYTHONPATH") "# export PYTHONPATH"))
+ #t))
+ (add-before 'check 'fixup-expected-test-results
+ ;; Upstream adjusted this test in commit:
+ ;; 3ae884a6485af82d300515813f537685b08dd800
+ (lambda _
+ (substitute* "tests/test2/expected.txt"
+ (("^20") "0"))
+ #t))
+ (add-before 'check 'drop-java-xss-argument
+ ;; Upstream removed this argument in order to support 32-bit
+ ;; architectures. commit: 4be0111d879aa95fdc0d9f24fe529f8c664d4093
+ (lambda _
+ (substitute* "enjarify/runtests.py"
+ (("java -Xss515m") "java "))
+ #t))
+ (add-after 'install 'install-enjarify-wrapper
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out")))
+ (mkdir-p (string-append out "/bin/"))
+ (copy-file "enjarify.sh" (string-append out "/bin/enjarify"))
+ #t))))))
+ (native-inputs `(("openjdk" ,openjdk12)))
+ (synopsis "Translate Dalvik bytecode to equivalent Java bytecode")
+ (description "Android applications are Java programs that run on a
+customized virtual machine, which is part of the Android operating system, the
+Dalvik VM. Their bytecode differs from the bytecode of normal Java
+applications. Enjarify can translate the Dalvik bytecode back to equivalent
+Java bytecode, which simplifies the analysis of Android applications.")
+ (license license:asl2.0)))