纯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 中指定:

<!-- This is the platform API where NativeActivity was introduced. -->
    <uses-sdk android:minSdkVersion="9" />

<!-- This .apk has no Java code itself, so set hasCode to false. -->
    <application android:label="@string/app_name" android:hasCode="false">

纯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开发游戏。

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

  1. 纯C语言开发无java、无dex的安卓native apk(新NDK-r23e + WSL)---2022笔记

    之前的测试,使用的都是非常老的 NDK -- NDK-r10b,好像是2014年发布的. 使用新的 NDK-r23e 后,代码中的makefile等也无需做什么调整,可以直接使用. 但还是碰到个跟 跨 ...

  2. 我用纯C语言开发的中英文混合分词服务器3.0正式发布,词库190多万词,每秒切分5万+,同时提供 c、java、C#、delphi、js调用范例

    我用纯C语言开发的中英文混合分词服务器3.0正式发布,词库190多万词,每秒切分5万+,同时提供 c.java.C#.delphi.js调用范例 百万商业圈中英文混合分词服务器3.0正式发布, 绝对稳 ...

  3. linux c语言 电子相册,纯C语言开发(电子相册).doc

    纯C语言开发(电子相册) PAGE PAGE 4 毕 业 论 文 课 题:(C语言)电子相册 摘要:对于java,.net,C++等一些面向对象的语言来说,结合相应的开发工具做出一个电子相册并非难事, ...

  4. c语言开发游戏趋势,都9012年了,为何我还坚持用C语言开发游戏

    我最近所有个人项目游戏都是用"纯" C语言开发.解释为什么要这样做可能很有趣. 预警:一大堆枯燥的编程语言观点将要出现. 我需要什么样一种编程语言 有些条件是不可协商的. 首先,语 ...

  5. Go语言开发工程师一定要熟读的5个开源项目

    文章目录 1.简介 2.开源项目 2.1.Codis 2.2.Etcd 2.3.Kubernetes 2.4.Caddy 2.5.Go-MySQL 3.原文地址 1.简介 写代码同写文章一样,既是技术 ...

  6. java计算机毕业设计基于安卓Android/微信小程序的大学生签到管理系统APP

    项目介绍 随着Internet的发展,人们的日常生活已经离不开网络.未来人们的生活与工作将变得越来越数字化,网络化和电子化.网上管理,它将是直接管理签到系统app的最新形式.本论文是以构建签到系统ap ...

  7. java计算机毕业设计基于安卓Android/微信小程序的游泳馆管理系统APP

    项目介绍 游泳馆管理系统小程序,主要对首页.个人中心.会员管理.场馆类型管理.泳池类型管理.饮食类型管理.场馆信息管理.泳池信息管理.饮食信息管理.泳池预订管理.购买信息管理.会员等级管理.会员充值管 ...

  8. java计算机毕业设计基于安卓Android/微信小程序的自来水收费系统APP

    项目介绍 网络的广泛应用给生活带来了十分的便利.所以把自来水收费管理与现在网络相结合,利用java技术建设自来水收费系统app,实现自来水收费的信息化.则对于进一步提高自来水收费管理发展,丰富自来水收 ...

  9. java计算机毕业设计基于安卓Android/微信小程序的电脑组装机配置商城APP

    项目介绍 网络的广泛应用给生活带来了十分的便利.所以把组装机配置商城管理与现在网络相结合,利用java技术建设组装机配置商城app,实现组装机配置的信息化.则对于进一步提高组装机配置商城管理发展,丰富 ...

最新文章

  1. 性能优化之Java(Android)代码优化
  2. LuoGuP4721:【模板】分治 FFT
  3. 【Unity】2.11 了解游戏有哪些分类对你开阔思路有好处
  4. error occurred when trying to upload ui5 project to ABAP repository in win8
  5. PHP Calendar 函数,wordpress函数get_calendar()用法示例
  6. Selenium +Java自动化环境安装
  7. 16 计划稳定性与控制
  8. 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御
  9. JVM 基础知识(GC)
  10. 语音压缩编解码器:lyra
  11. 算法——排序——归并排序图解动画
  12. win10重装系统教程【图文并茂】
  13. 【冷冻电镜入门】加州理工公开课课程笔记 Part 3: Image Formation
  14. 用户行为分析的指标体系
  15. Unity3D的传送带和物体移动
  16. 使用su命令切换到别的用户时报su:无法打开会话:权限被拒绝
  17. 面试(hardware)
  18. Golang学习(二十四)家庭记账项目
  19. JavaScript星星动画心形js特效
  20. 四川航天职业技术学院计算机网络期末考试,四川航天职业技术学院计算机网络技术专业...

热门文章

  1. html 页面QQ 。。。在线交谈
  2. php输入中文就乱码,在php图片中输入中文文字解决乱码
  3. 「太阁干货」华为模拟器eNSP安装教程
  4. 自控实验——直流电机转速设计实验报告
  5. 小程序今日头条demo
  6. Windows phone 8 JumpStart--Async
  7. Anaconda入门
  8. 吐血整理:小白学python编程基础(1)
  9. 360浏览器被2345流氓网页挟持
  10. 使用万用表测试三极管的方法