{"id":28763256,"url":"https://github.com/yag00/sandvik","last_synced_at":"2026-05-07T17:41:04.065Z","repository":{"id":297984631,"uuid":"998012980","full_name":"yag00/sandvik","owner":"yag00","description":"** Mirror ** Main repo on GitLab! **  The Sandvik project is a minimal Dalvik JVM written in C++. It is a work in progress, aiming to become a full-featured Dalvik Virtual Machine (VM) implementation.","archived":false,"fork":false,"pushed_at":"2025-11-28T15:31:06.000Z","size":4133,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-29T02:28:37.752Z","etag":null,"topics":["android","dalvik","emulator","java","jvm"],"latest_commit_sha":null,"homepage":"https://gitlab.com/christophe.duvernois/sandvik","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yag00.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-07T17:21:39.000Z","updated_at":"2025-11-28T15:31:10.000Z","dependencies_parsed_at":"2026-03-04T14:01:11.874Z","dependency_job_id":null,"html_url":"https://github.com/yag00/sandvik","commit_stats":null,"previous_names":["yag00/sandvik"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yag00/sandvik","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yag00%2Fsandvik","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yag00%2Fsandvik/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yag00%2Fsandvik/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yag00%2Fsandvik/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yag00","download_url":"https://codeload.github.com/yag00/sandvik/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yag00%2Fsandvik/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32749578,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","dalvik","emulator","java","jvm"],"created_at":"2025-06-17T09:08:00.266Z","updated_at":"2026-05-07T17:41:04.059Z","avatar_url":"https://github.com/yag00.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sandvik Project\n\n![Sandvik Logo](doc/logo.png)\n\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n![pipeline](https://gitlab.com/christophe.duvernois/sandvik/badges/main/pipeline.svg)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=christophe.duvernois_sandvik\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=christophe.duvernois_sandvik)\n\n## Overview\n\nThe Sandvik project is a minimal Dalvik JVM written in C++.\n\nIt is a work in progress, aiming to become a full-featured Dalvik Virtual Machine (VM) implementation.\n\n## Features\n\n- Complete Dalvik Virtual Machine (VM) implementation.\n- Support for Java Native Interface (JNI) for seamless integration with native code.\n- Modular and extensible architecture to facilitate customization and scalability.\n- Basic Java runtime support for executing essential Java functionalities.\n\n## Getting Started\n\n### Installation\n\n1. Build the project:\n\t```bash\n\t./waf configure\n\t./waf build\n\t./waf install\n\t```\n\n2. Run the tests:\n\t```bash\n\t./waf --tests\n\t```\n\n3. Run the VM:\n\t```bash\n\t./sandvik\n\t```\n\n## Usage\n\nSandvik can be used to run Dalvik bytecode files (`.dex`) or Android application packages (`.apk`). Below are the available options and their usage:\n\n```bash\n./sandvik {OPTIONS} [args...]\n```\n\n### Options\n- `-h, --help`\n\tDisplay available options.\n\n- `--version`\n\tDisplay the version of this program.\n\n- `--log=[level]`\n\tSet the log level. Available levels: `NONE`, `DEBUG`, `INFO`, `WARN`, `ERROR`.\n\n- `--logfile=[logfile]`\n\tSet the log output file.\n\n- `--no-console`\n\tDisable console output.\n\n- `-i, --instructions`\n\tEnable instruction trace (prints per-instruction VM execution details).\n\n- `-c, --calltrace`\n\tEnable call trace (prints method entry/exit and call details).\n\n- `--dex=[file]`\n\tSpecify the DEX file to load.\n\n- `--apk=[file]`\n\tSpecify the APK file to load.\n\n- `--jar=[file]`\n\tSpecify the Jar files to load.\n\n- `--main=[classname]`\n\tSpecify the main class to run.\n\n- `--runtime=[runtime]`\n\tSpecify path to override the default Java runtime.\n\n- `args...`\n\tPositional arguments for the Java program.\n\n- `\"--\"`\n\tCan be used to terminate flag options and force all following arguments to be treated as positional options.\n\n### Examples\n\nTo run the `HelloWorld` Java program:\n\n1. Compile the Java source file:\n\t```bash\n\tjavac HelloWorld.java\n\t```\n\n2. Convert the compiled `.class` file to Dalvik bytecode using the `d8` tool:\n\t```bash\n\td8 HelloWorld.class\n\t```\n\n3. Run the generated `classes.dex` file with Sandvik:\n\nThis will execute the `HelloWorld` class from the specified DEX file, showcasing the VM's ability to interpret and run Dalvik bytecode. The output should display the expected behavior of the test program, such as printing \"Hello, World!\" to the console:\n```bash\n./wbuild/sandvik -i -c --log=INFO --dex tests/java/hello/classes.dex --main=HelloWorld\n[+]  === sandvik 1.0.0-983807d ===\n[*] VM instance created.\n[*] Running class: HelloWorld\n[*] 0000: sget-object v1, string@0                : 62 01 00 00                            HelloWorld::main([Ljava/lang/String;)V\n[java.lang.System.\u003cclinit\u003e] [*] 0000: const/4 v0, #0                          : 12 00                                  java.lang.System::\u003cclinit\u003e()V\n[java.lang.System.\u003cclinit\u003e] [*] 0001: sput-object v0, string@1                : 69 00 01 00                            java.lang.System::\u003cclinit\u003e()V\n[java.lang.System.\u003cclinit\u003e] [*] 0003: sput-object v0, string@2                : 69 00 02 00                            java.lang.System::\u003cclinit\u003e()V\n[java.lang.System.\u003cclinit\u003e] [*] 0005: sput-object v0, string@0                : 69 00 00 00                            java.lang.System::\u003cclinit\u003e()V\n[java.lang.System.\u003cclinit\u003e] [*] 0007: return-void                             : 0e                                     java.lang.System::\u003cclinit\u003e()V\n[java.lang.System.\u003cclinit\u003e] [*] 0000: invoke-static method@9                  : 71 00 09 00 00 00                      java.lang.System::initializeSystemClass()V\n[java.lang.System.\u003cclinit\u003e] [*] invoke-static java.lang.System.initializeStream()V ()\n[java.lang.System.\u003cclinit\u003e] [*] 0003: return-void                             : 0e                                     java.lang.System::initializeSystemClass()V\n[*] 0002: const-string v0, string@1               : 1a 00 01 00                            HelloWorld::main([Ljava/lang/String;)V\n[*] 0004: invoke-virtual {v1, v0}, method@2       : 6e 20 02 00 01 00                      HelloWorld::main([Ljava/lang/String;)V\n[*] invoke-virtual java.io.PrintStream.println(Ljava/lang/String;)V (this=Instance of java.io.PrintStream, String=Hello, World!)\nHello, World!\n[*] 0007: return-void                             : 0e                                     HelloWorld::main([Ljava/lang/String;)V\n[*]  === end ===\n```\n\n## Contributing\n\nContributions are welcome! Please follow these steps:\n\n1. Fork the repository.\n2. Create a new branch for your feature or bugfix.\n3. Submit a pull request with a detailed description.\n\n## License\n\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n\nThis project is licensed under the GNU General Public License v3.0. See the [LICENSE](LICENSE) file for details.\n\n## Contact\n\nFor questions or support, please contact [me](mailto:christophe.duvernois+github@gmail.com).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyag00%2Fsandvik","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyag00%2Fsandvik","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyag00%2Fsandvik/lists"}