DUCK - Dalvik Unpythonic Compiler Kit

The latest version of DUCK can be obtained from this repository.


This package contains Python packages, modules and tools for reading and writing files related to Android and the Dalvik virtual machine, particularly DEX files and the bytecode they contain.

The motivation for this package is to understand the contents of Android's APK package files, to help with assembling new packages without the need for the standard Android SDK, and to experiment with compiling applications written in programming languages other than Java.

In addition, tools are also provided to perform tasks related to publication, such as package signing, without the need for the equivalent Java tools. See the Keys and Certificates document for information about creating keys and certificates, and the contents of the Tools directory for tools that can be used to create manifests and sign packages.

The Getting Started document covers basic installation of the package and its dependencies.


Since provision of compilers is one of the motivations behind this package, it is intended that at least one will be provided. These can be found in subdirectories of the Compilers directory. Examples for each language can be found in corresponding subdirectories of the Examples directory.

Currently, the only compiler included is for a Python-like language with features that map closely to those exposed by the DEX file format.


Instead of maintaining a separate bugtracker, tasks related to work on each component of this package are stored in subdirectories of the Tasks directory. This is done in the spirit of having a TODO file which would list things that needed to be worked on. The Tools/tasks.py utility can be used to print a list of tasks in order to get an overview of the current state of the project.

Examples and Demonstrations

A collection of example applications can be found in the Examples/Serpentine directory.

Some demonstration applications are included in the Demos/Serpentine directory.

Authors and License

David Boddie david@boddie.org.uk

Unless indicated otherwise, the contents of this package are licensed under the GNU General Public License version 3 (or later).

```" Copyright (C) 2016 David Boddie david@boddie.org.uk

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. ```

The authors may change the license of examples and header files to suit license compatibility requirements in the future.