完全用C和make编写Android应用程序

2020-05-11 03:37:29

有没有想过编写C代码并在Android上运行?厌倦了只做最基本的事情的几百万字节的包。这是一个演示如何制作您自己的APK,以及如何在大约2秒内构建、安装并自动运行它们,并且APK大小约为25KB。

免责声明:我对此代码不承担任何担保或责任。自费使用。我从来没有在应用程序商店发布过应用程序,所以使用这个工具集来制作商业应用程序可能会有一些根本的问题!

因为有时候你想做一些不符合正常方式的事情,而网上所有的讨论都围绕着所有正常的过程来做。而这些过程会发生变化,使得跟上并做具体的事情变得困难。通过使用Makefile,可以很容易地看到执行了哪些确切的命令,并添加自定义规则和调整您的构建。C是一种通用语言。从ESP8266到RaspberryPI、Windows Linux,再到现在的Android,Rawraw可以在所有操作系统上运行。只需编写一次代码,就可以随时随地使用它。

当你没有用堆积如山的豆子填满你的构建过程时,你最终只剩下重要的部分,而不是琐碎的部分。这使得开发、部署等变得更容易,因为一切都需要更少的时间。

为了吸引那些在互联网上张贴这是不可能的事情的勒德人,或者你做错了堆栈溢出问题,还得做一点这件事。在JNI&34;中请求权限,哦,您必须在Java或其他类似的愚蠢的东西中这样做。我对你关于什么是可能的,什么是不可能的看法完全不感兴趣。这是计算机科学。这里有很多限制。我可以做任何我想做的事。这只是几个比特。你不拥有我。

附注:如果你想要一大堆关于如何用C在Android上做你需要Java做的事情的例子,滚动到这个文件的底部:https://github.com/cntools/rawdraw/blob/master/CNFGEGLDriver.c-它展示了如何使用JNI在Android API之间编组大量的东西,而不需要回到Java/Kotlin的领域。

大部分测试都是在Linux上完成的,然而@AEFeinstein至少在Windows上做了粗略的测试。你还需要对Android studio的一些组件进行设置才能使用它,所以完全安装Android studio通常会更容易一些,但在Windows上有一些关于如何零散安装的说明。

这组步骤介绍了如何在Linux中安装支持NDK的Android Studio。它使用图形化安装程序,并且安装的内容比下面的说明多得多。您可以将这两套说明混合搭配使用。例如,如果您使用的是Linux,但不要为Goog牺牲6 GB的磁盘。

进入手机上的“开发人员选项”并启用USB调试,确保选择“始终允许”。

如果您在Windows Subsystem for Linux(WSL)中进行开发,请按照无GUI安装的步骤从命令行安装Android组件,而不安装任何GUI组件。

为了将APK推送到您的手机上,您还需要在Windows中安装ADB。您可以通过从https://developer.android.com/studio#downloads或直接从https://dl.google.com/android/repository/platform-tools_r24.0.4-windows.zip.获取完整的Android Studio来做到这一点。安装完整的Android Studio比较容易,但您也可以只获取命令行工具,然后从那里安装ADB。以下步骤概述了如何使用直接链接执行此操作。

安装Windows Subsystem for Linux(WSL)。你可以在这里找到使用说明:https://docs.microsoft.com/en-us/windows/wsl/install-win10-我们使用ubuntu来做这件事。

仅下载命令行工具";:https://developer.android.com/studio#downloads-您可以通过单击";LinuxTM工具集,然后右键单击Accept链接并说“将链接复制到位置”来获取URL并在WSL中使用wget下载工具。然后你可以在WSL中说wget<;link>;。

为Android SDK创建一个文件夹,并将其导出。您可能希望将该导出添加到~/.bashrc:

解压缩仅限";命令行工具的";文件,以便工具位于全新的Android-SDK文件夹中。

#yes|$Android_HOME/tools/bin/sdkmanager--SDK_ROOT=${Android_HOME}--许可证#$Android_HOME/tools/bin/sdkmanager--SDK_ROOT=${Android_HOME}";build-tools;29.0.3";";cmake;3.10.2.4988404";";ndk;21.1.6352462";";patcher;v4";&。Android-24&34;";工具";

注意:由于环境变量的更新,您可能需要关闭并重新打开您的WSL终端。

进入手机上的“开发人员选项”并启用USB调试,确保选择“始终允许”。

您可能希望复制并粘贴此项目,但您可能会将其作为子模块使用。您可能还希望复制并粘贴子模块。

您必须覆盖应用程序名称。参见Makefile APPNAME-您应该能够包括此项目的Makefile并覆盖它。您还必须使用您计划使用的任何名称和组织更新AndroidManifest.xml。这意味着更新所有三个字段。头中的android:name字段和Package字段。

如果您使用的是必须提示输入的权限,则必须将其添加到AndroidManifest.xml中,并检查您是否拥有该权限,如果没有,则提示用户。请参见下面的辅助函数。您可以使用ColorChord中的ound_android.c查看此示例。https://github.com/cnlohr/colorchord/blob/master/colorchord2/sound_android.c。

请务必卸载所有以前安装的应用程序,如果您有一个使用另一个密钥签名的相同名称的不同版本,则会发生不好的事情。

如果您的应用程序立即打开和关闭,请尝试查看是否缺少任何符号:

因为我们完全是在NDK中使用JNI来做这件事,所以我们不会有机会编写任何Java/Kotlin代码并调用它。这意味着所有的在线例子都必须大量编排。在rawraw的EGL驱动程序中,我们有很多这样做的例子。也就是说,您可以使用以下函数,这些函数可以帮助您完成大部分工作。

此外,除了rawraw之外,您还必须实现以下两个函数,以便在应用程序挂起或恢复时进行处理。

除此之外,HandleMotion(.)的语法。不同之处在于,掩码变量不是掩码,它只是更新特定的指针。