纯C语言开发无java、无dex的安卓apk---2022笔记

纯C语言开发无java、无dex的安卓apk---2022笔记

纯C语言开发的安卓应用,分为 :

1). 无GUI的 command line tool,比如linux终端中的 clear、ls、mkdir、cp等指令

2). 带GUI的 activity 应用

光使用 Android NDK可以开发安卓应用吗?

答案是能,但只能开发出来这两样东西:

1). 无GUI的命令行程序,adb push 到安卓上是可以在 adb shell 中直接运行的

2). 带GUI的 .so 库文件,为便于描述,这种库暂称为 native_lib.so

一般情况是写个 native_lib.so 是让apk内的java代码调用。

但妙就妙在 SdkVersion - 9 以上的 dalvik/art 可以直接调用apk内的 native_lib.so,

也就是允许 apk 文件内没有任何java字节码、没有任何dex包。

而 native_lib 里面的C代码是可以创建界面的,

综上,使用 NDK 开发带界面的安卓应用,仅仅是缺个apk打包工具。

要让 dalvik/art 直接调用 native_lib.so,只需要在 AndroidManifest.xml 中指定:

纯C实现apk应用开发,苦在打包、签名apk这个环节,

目前没有一个全 native 的 apk builer,打包、签名工具全是 java 环境的,全都依赖JDK

自己的验证结果:

1). 无dex的apk确定可行,能正常安装

2). 自用的 oppo 手机,里面的 dalvik/art 确实可以直接加载这种apk 中 native_lib.so 并运行之

操作步骤:

1). 下载安装 NDK

2). 编译 NDK 中的 samples\native-activity\ 示例 (用C语言代码创建 activity 的示例)

../../ndk-build clean ../../ndk-build #就这两条指令即可,生成的.so 在 samples\native-activity\libs\ 里面

3). apk 打包,请参考gitee项目:build-apk-with-c: 纯C语言开发无java、无dex的安卓apk应用

4). 也可以把 apk 传到在用的手机上安装运行

可通过微信的“文件传输助手” 手机微信上长按收到的apk -> 点其它应用打开 -> 应用包安装程序

其它:

SdkVersion 虽然说选9即可,但设置得太低太旧的话安装apk的时候会提示说:

"此应用专为旧版Android打造,因此可能无法正常运行"

网上说设置为17以上就不会出现这个提示了。

Application.mk 中可修改生成哪些CPU的so

APP_ABI := arm64-v8a #all

NDK 中的 samples\native-activity\libs\ 示例 ,启动后会等待用户在屏幕上点一下,

然后不断变换背景色。

基于这样的开发环境,可以移植很多开源项目到安卓上,

比如,SDL、cairo等绘图库,也可以直接用C + 安卓EGL开发游戏。

2023.06.08 修正更新: 前文所说的 native_lib.so,并非由dalvik/art直接加载,而是 android sdk 中的 android.jar 里面有个java类,叫做NativeActivity,是由这个类加载的native_lib.so。这个类的完整路径为:android.app.NativeActivity。

相关灵感

博彩365bet网址导航 太上老君姓什么?揭开古老传说的神秘面纱
博彩365bet网址导航 电信4G与联通4G对比,哪个更优?(网速、覆盖、服务与资费全方位评估)
博彩365bet网址导航 ⦿估打的练习方法

⦿估打的练习方法

📅 07-21 👁️ 8926
beat365官网下载苹果手机 直播视频怎么录制 在哪下载触手录?
beat365官网下载苹果手机 问道平民玩家职业哪个好 0氪金最强职业选择推荐
博彩365bet网址导航 宏命令在魔兽世界中无法使用时应如何解决?
博彩365bet网址导航 全曝光了!明星在上海都住这些小区!但看上去没有想象中那么贵
365bet365打不开 《黄帝内经·素问》第九: 六节藏象论篇(原文+译文)
beat365官网下载苹果手机 安全套·避孕套

安全套·避孕套

📅 07-21 👁️ 3873