NDK开发-内存管理目录
局部引用
删除局部引用
判断可用局部引用
批量管理局部引用
释放所有局部引用
保留局部引用释放
全局引用
弱全局引用
局部引用大多数的jni函数,调用以后返回的结果都是局部引用。局部引用在所在函数执行完毕后就会销毁对应的内存空间,和常说的局部变量有区别,赋值给全局变量也没用,局部引用无法跨函数使用。
删除局部引用一个函数内的局部引用数量是有限制的,在早期的安卓系统中,体现的更为明显。当函数体内需要大量使用局部引用时,比如大循环,最好及时删除不用的局部引用,可以使用env->DeleteLocalRef来删除局部引用。用法如下:
123456jstring javaString = env->NewStringUTF("Hello from JNI");const char *str = env->GetStringUTFChars(javaString, NULL);LOGE("局部引用javastring删除前 is %s",str)env->DeleteLocalRef(javaS ...
NDK开发基础目录
什么是NDK
为什么需要NDK
什么是JNI
第一个NDK工程
so中的log输出
NDK多线程pthread
JNI_OnLoad
JNIEnv
JNIEnv指针的获取或使用场景
JNI函数静态注册
JNI函数动态注册
1. JNI_OnLoad
2. GetEnv
3. FindClass
4. RegisterNatives
5. NewStringUTF
so路径的动态获取
多个cpp文件编译成一个so
编译多个so
so之间的相互调用
JNI创建java对象
使用NewObject创建对象
使用AllocObject创建对象
JNI访问java属性
通过JNI访问java数组
通过JNI访问java方法
通过JNI访问java父类
什么是NDKNDK(Native Development Kit):原生开发套件,是一套工具,作用是能够在安卓应用中使用C和C++代码,并提供众多的平台库,可使用这些平台库管理原生activity和访问实体设备组件。
如需为您的应用编译和调试原生代码,您需要以下组件:
Android 原生开发套件 (NDK) ...
fed9d2b48e44fa6e8c858276fef26c499ba0c889557b3375977c37a5804dc500860da6053f8246a55a8c5b34df24206c7f609b5834f13541690ed47a4eeedb4c95d3a37b7c101fe161d357e77da87430e0951ef1418b21428f95a4b05c4c69c2971089d99b0b025b8db434a95c6c0a9aed7048bd37b4c9b7e5e2e41be692ccda38b3092c9686e374d5c2d3f9904b3d1fdc5d33d950352ff8f47960a3c66d953f32acaec0a9d7e3ba71d2d4031c1ff798e5ded044e9b57e6e84d2a53fab1e2121f8af4d03d1e91dcd34ca1b4c30a873c586a26cbd607d406c0c11c2f823b3d3c4aa10e0b185c100c3ec96d4179bccbe0d3112165d8283cb51a ...
安全开发
未读1. hdc无法识别模拟器设备HDC版本不一致导致
执行查看链接设备的命令,无法识别到运行的设备。
1hdc list targets
尝试kill服务重启也无法识别
1hdc kill -r
问题原因通过查看软件设置,可以看到模拟器相关的资源文件是和HarmonyOS相关的,且输入HarmonyOS sdk api 9
但是之前的hdc环境变量的配置,我是配置的OpenHarmony sdk目录下的toolchains,以下是之前错误的配置:
正确的配置是要换成HarmonyOS sdk目录下的toolchains
重新配置好匹配版本的hdc环境变量后就可以正常识别到设备和设备交互啦
2. hdc shell执行报错12C:\Users\Administrator>hdc shellERR:ohsh para too less!
解决办法:
方法1:使用HdcExternal shell
方法2:用api8的sdk附带的hdc
参考链接:https://developer.huawei.com/consumer/cn/forum/topic ...
DevEco Studio 配置开发环境完成后,通过运行 Hello World 工程来验证环境设置是 否正确。接下来以创建一个 Phone 设备的工程为例进行介绍。
1. 创建一个新工程
步骤1:打开 DevEco Studio,在欢迎页单击 Create Project,创建一个新工程。
步骤 2 :根据工程创建向导,选择创建 Application 或 Atomic Service。选择“[OpenHarmony]Empty Ability”模 板<先基于OpenHarmony学习,可以使用最新版的sdk>,然后单击 Next。
关于工程模板的介绍和支持的设备类型,请参考工程模板
模板名称
说明
Empty Ability
用于 Phone、Tablet、TV、Wearable 设备 的 Feature Ability 模板,展示了基础的 Hello World 功能。
Native C++
用于 Phone、Car、Tablet 设备的 Feature Ability 模板,作为应用/服务调用 C++代 码的示例工程,界面显 ...
华为HarmonyOS开发者官网:华为开发者联盟-智能终端能力开放,共建开发者生态 (huawei.com)
OpenHarmony官网:https://www.openharmony.cn
1. 北向开发北向开发通俗讲就是开发APP应用,可以基于OpenHarmony或者HarmonyOS,如果基于OpenHarmony开发,APP就是运行在厂商的自研设备上,例如厂商自己的智能电视,智能车机等,如果要接入鸿蒙生态或运行在华为手机上就需要基于HarmonyOS开发。
由于HarmonyOS里面大部分的系统api是与OpenHarmony通用的,所以接下来主要基于基于OpenHarmony4.0 release版本进行学习(兼容OpenHarmony3.2版本),涉及到华为特有功能时基于HarmonyOS Next(4.0)版本<暂未开放>。
OpenHarmony 4.0 Release:OpenHarmony 4.0 Release)
2. HUAWEI DevEco Studio2.1 版本软件和工具配套关系
软件
版本
备注
OpenHarmony
4. ...
安全开发
未读1. HarmonyOS与OpenHarmony的区别1.1 OpenHarmonyOpenHarmony是开放原子开源基金会孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个只能终端设备操作及系统的框架和平台
1.2 HarmonyOSHarmonyOS是华为通过OpenHarmony项目,结合商业发行版增加能力,构建华为自研产品的完整解决方案。
HarmonyOS核心是基于OpenHarmaony的商业版(类似于Unbuntu与Linux)
HarmonyOS、OpenHarmaony两者类似于Android体系中AOSP与google安卓系统的关系。
1.其中HMS相当于谷歌的GMS,包含华为全家桶的许多服务的编程接口API,未开源
2.华为商用的HarmonyOS基于OpenHarmony
3.HarmonyOS Connect鸿蒙智联(HiLink)为华为的合作厂商提供的华为统一的智能硬件生态品牌
总的来说,HarmonyOS里面大部分的系统api是与OpenHarmony通用的。在鸿蒙开发体系中:
如果开发者需要未自己的设备开发 ...
安全开发
未读1. Android中常用布局整理1.1 LinearLayout(线性布局)
orientation:布局方向(horizontal 水平或 vertical 垂直)。
gravity:控制子元素在布局中的位置,如 center、left、right、top、bottom、center_vertical、center_horizontal 等。
layout_gravity:控制组件相对于父布局的位置,比如 center、center_vertical、center_horizontal 等。
weight:在布局中分配剩余空间的比例。
margin:组件外部的间距,可以有 marginLeft、marginRight、marginTop、marginBottom。
padding:组件内部的间距,包含内容与组件边界的间距。
1.2 RelativeLayout(相对布局)
layout_above:放置在指定元素之上。
layout_below:放置在指定元素之下。
layout_toLeftOf:放置在指定元素的左边。
layout_toRightOf:放置在指定元素的右边。
...
将B站生成的iframe标签代码替换以下的iframe内容粘贴到具体文章中即可
123<div style="position: relative; width: 100%; height: 0; padding-bottom: 75%;"><iframe src="//player.bilibili.com/player.html?aid=55224540&cid=96981660&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" style="position: absolute; width: 100%; height: 100%; left: 0; top: 0;"> </iframe></div>