
Android
文章平均质量分 93
jian_cheng_90
strive to be better
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
DetectX 深度学习模型Android部署 - NanoDetPlus + NCNN
使用NCNN将Nanodet-Plus_m416部署到android设备上,调用摄像头达到实时检测效果,并根据自身需求训练NanoDet-Plus模型并部署。原创 2022-09-04 23:53:14 · 9302 阅读 · 0 评论 -
Android使用OpenCV加载深度学习模型 - MobileSSD
要点:1. 在JNI中使用Opencv-4.2.02. 使用CameraX (1.0.0-beta03)3. 使用MobileSSD caffe 模型4. 使用renderscript进行YUV420 -> RGBA5. easyPermissions权限申请6. 模型文件会在首次使用时拷贝到packageDir代码:https://github.com/riskycheng...原创 2020-04-26 23:32:11 · 1771 阅读 · 6 评论 -
Android NDK - JNI 回调Java函数注意事项
被回调的Java静态函数中有数组参数假设有如下Java函数待被JNI调用,但是由于Cpp中的数组和java中的数组是属于不同的数据类型,因此是无法直接传递的。 按照经验,极可能会在JNI中将基本数据类型数组直接传入,但这会报错。 因此传递之前,一定要C++中的数组进行本地化转换。//Java 函数package com.test.jni;public class TestFun原创 2018-01-22 11:05:46 · 469 阅读 · 0 评论 -
Android NDK - JNI中回调Java中的函数及函数签名
在实际应用中,除了在JNI层对部分功能进行C++的实现,同时还会有在JNI中对Java函数的调用以实现某种逻辑的联通。 在JNI中回调Java函数,实际上是通过反射机制来实现的,通过反射机制取得目标函数所在的类,以及其名称,通过NDK提供的接口在JNI层进行调用。JNI中调用Java函数的栗子TestFunction.javapackage com.test.jni;public class原创 2018-01-14 00:48:15 · 1294 阅读 · 0 评论 -
GoogleTest NDK 编译
下载 googleTest 源码从github上直接clone 最新的googleTest源码: 创建一个本地路径,如:c:/test/GoogleTest然后进入到该路径下直接clone最新的代码:git clone https://github.com/google/googletest.gitNDK编译当前的目录结构:c:/test/Google原创 2018-01-02 14:43:13 · 1073 阅读 · 0 评论 -
Android NDK - JNI 传递自定义类型及其数组传递
在实际开发中,JNI与java有很多场景需要传递数据,有时是基本数据类型,而有时则是自定义类型。在遇到通过回调Java中函数进行自定义类型传递时,是不可以直接传递,需要进行转换,本篇将针对参数存在自定义类型和自定义类型数组两种场景进行举例说明。基本数据类型参数数组针对如下代码片段说明://基本数据类型参数数组的静态函数package com.test.jni;//Java ...原创 2018-02-22 14:28:10 · 3192 阅读 · 2 评论 -
Android Studio在Gradle中调用cmd脚本
Gradle中调用cmd需要在Gradle编译时,调用某些脚本进行文件操作,比如:头文件更新,或者动态链接库文件的更新等,需要借助脚本文件,并且不需要手动运行,那么如何使用Gradle呢?如下代码可以实现在执行Gradle编译时连续运行两条命令: exec { workingDir '../' commandLine 'cmd', '...原创 2018-03-22 13:48:58 · 4355 阅读 · 0 评论 -
利用BuildConfig进行编译选择及Gradle自定义BuildTypes和字段
BuildConfig的用法在Android开发中,我们使用android.util.Log来打印日志,方便我们的开发调试。但是这些代码不想在发布后执行,我们并不想在软件发布后调试日志被其他开发者看到,现在我的方法是设置一个全局变量,标记软件为Debug模式还是Release模式。来看下代码:public class Log { private static final boo...原创 2018-03-20 12:35:05 · 2352 阅读 · 0 评论 -
Android 内存泄漏 - 不要用static修饰控件
LeakCanary 工具集成LeakCanary是android平台用于内存泄漏检测的开源工具,使用方法十分简单,其github地址: LeakCanary Github内存泄漏总结 Avoid using non-static inner classes in an activity if instances of the inner class could outliv...原创 2018-04-04 15:24:17 · 5479 阅读 · 0 评论 -
Android 内存泄漏 - Animator的使用与释放
Animator 导致泄漏在属性动画中如果定义为无限循环,如果在Activity中播放这类动画并且在其退出(生命周期结果前)未停止动画,造成内存泄漏。举例说明假设有如下无限循环动画:public class LeakActivity extends AppCompatActivity { private TextView textView; private...原创 2018-04-04 16:45:11 · 10111 阅读 · 0 评论 -
Android NDK - JNI 与 Java 接收及修改数组
JNI 取用 Java 数组即将已经在Java中产生的数组数值传递到native去处理并返回Java层处理结果,==不会修改Java中该数组Field的数值==,比如应用场景: - Java层通过Camera获取的帧数据传递给native结合opencv进行处理,并返回(图像预处理/检测/分类等)结果; - 在Java业务层产生的数据,需要进行复杂的运算(比如加密/解密等); - ……...原创 2018-05-26 23:03:40 · 2050 阅读 · 0 评论 -
Android native crash 日志分析
NDK的常见异常NDK编译生成的.so文件作为程序的一部分,在运行发生异常时同样会造成程序崩溃。不同于Java代码异常造成的程序崩溃,在NDK的异常发生时,程序在Android设备上都会立即退出,即通常所说的闪退,而不会弹出“程序xxx无响应,是否立即关闭”之类的提示框。NDK是使用C/ Cpp来进行开发的,熟悉C/Cpp的程序员都知道,指针和内存管理是最重要也是最容易出问题的地方,稍有不慎就...原创 2018-09-20 22:59:48 · 1467 阅读 · 1 评论 -
Keras实例教程(五)- 使用 GTSRB 用于交通标志识别
数据集GTSRB dataset :http://benchmark.ini.rub.de/?section=gtsrb&subsection=dataset#Downloads该数据集包含43类交通标志,提供的资料中包含标注信息。【0】 数据准备根据标注裁剪图像在每类的文件夹中,包含若干.ppm格式的图片及一个.csv文件,csv中包含每个ppm图像的标注信息,根据标注信息...原创 2019-01-19 18:47:27 · 3742 阅读 · 0 评论 -
Android-Studio Gradle Build Flavor 使用小结
Build Flavor 作用在一个分支上,编译不同的版本(包名/应用图标/debug/release)多个分支代码片段/so库,合并到同一分支进行维护,并且可以根据不同的Build Variant 进行选择性编译;使用方法比如现在有如下需求:第一维度是高通835/845平台(不同平台可能使用不同的DSP相关的so)第二维度是算法提供商,以人脸检测为例提供商有Se...原创 2019-07-08 10:51:50 · 3217 阅读 · 0 评论 -
Android NDK - JNI 函数注册
在JNI中定义native函数,所有的native函数均需要注册之后才能在动态链接库加载后被索引到,函数注册有两种方式:静态注册:采用规范命名函数名称,并生成对应的头文件;动态注册:采用 JNINativeMethod 结构体进行动态注册,注册时即声明其签名/native函数对应关系/java层的native对应函数声明类。当前Android本身即推荐使用动态注册的方式,因此对于较早期的静态注原创 2018-01-03 15:25:55 · 674 阅读 · 0 评论 -
Android Uri解析4.4及以上版本兼容
在android level 19之后,由于官方更新了Uri的格式,因此需要采用最新的Uri解析方式以适配, 如果还采用Android 4.4之前的解析方法(实际上目前网络上大部分还是这种方式)就会出现空指针的问题,实际上就是因为格式不匹配导致的解析失败。参考实现如下,可以直接作为工具类加入现有代码中。/** * get the image/file path, able to run on原创 2018-01-02 16:18:30 · 786 阅读 · 0 评论 -
Tess4J OCR简单使用教程
Tess4J简介Tesseract-OCR支持中文识别,并且开源和提供全套的训练工具,是快速低成本开发的首选。而Tess4J则是Tesseract在Java PC上的应用。在英文和数字识别中性能还是不错的,但是在中文识别中,无论速度还是识别率还是较弱,建议有条件的话,针对场景进行训练,会获得较好结果,本文仅对目前Tess4J的用法进行介绍。使用教程1.去Tess4J官网下载源码包前往:Tess4J原创 2017-06-26 00:38:01 · 10165 阅读 · 11 评论 -
Android性能优化(二)- 丝般顺滑地加载大量图片
一、SoftReference备注:其实SoftReference已经弃用了,具体原因下面有讲到,但是为何还要讲它,下面也有原因,哈哈!首先什么是softreference呢?直译就是软引用,看样子就是说,这是一个非强势的引用,当别人强硬起来时候,它就不行了,嘿嘿,确实是这样的!软引用(SoftReference):如果一个对象它只具有软引用,当内存足够的时候,GC是不会去回收它的,但是当内存不足时原创 2015-03-31 11:43:28 · 761 阅读 · 0 评论 -
Android性能优化 (一)- ListView
一、概述 这里对ListView进行性能的优化,是指在对adapter进行重写的时候,需要注意影响ListView性能的地方。 ListView包含的三要素: 1.ListView : 用于显示列表的view; 2.adapter: 用于将数据映射到listview的容器; 3.data: 具体需要被映射的数据(包括 字符串、图片或其他的控件等)二、优化原理 由此,优化Listview的原创 2015-03-31 11:33:13 · 394 阅读 · 0 评论 -
Android性能优化(1) ——布局优化
本篇是关于布局优化部分。主要介绍使用抽象布局标签(本文介绍 include,viewstub,merge)以及如何使用相关工具(hierarchy viewer ,lint)来辅助优化。1.抽象布局标签(1). 标签include标签常用于将布局中的公共部分提取出来供其他layout共用,以实现布局模板化,这在布局里面编写方便提供了大大的便利。下面以一个布局main原创 2015-04-21 23:24:21 · 461 阅读 · 0 评论 -
Android性能优化(0) ——综述
Android性能优化综述,讲述何为性能优化,从哪些方面进行性能优化原创 2015-04-19 12:05:49 · 501 阅读 · 0 评论 -
深入理解Android异步线程
为什么要有异步线程?因为有些操作是耗时的,比如大量计算啊,网络下载啊等,并且这些耗时操作的结果是需要反应在UI组件上的,比如进度条,计算结果等,如果这些耗时操作放在主线程里,就是阻碍主线程,从而导致用户交互被阻碍,出现假死,甚至ANR(Application not respond)。由此,异步线程的作用就是专门用户处理此类耗时操作,同时不阻碍主线程交互,当耗时操作过程中或者结束后,将结果反应在组件原创 2015-07-13 00:44:57 · 615 阅读 · 0 评论 -
Activity生命周期及启动模式深入理解
Activity简介: Activity是用户接口程序,原则上它会提供给用户一个交互式的接口功能,它是Android应用程序的基本功能单元,可以通过布局文件赋予一个Activity界面,用于后期的交互,直观讲,就是每个Activity是独立的一个页面(当然有时候也会是对话框形式等)。 Android是通过Activity栈的方式来管理Activity的,一个Activity的实例的状态决定它在栈原创 2015-07-27 23:30:04 · 522 阅读 · 0 评论 -
Android消息处理机制—— Looper, Handler, Message
Android消息处理有三大核心类:Looper, Handler和Message,下面就是详细的诠释这三者作用与关联。 Looper Looper时常被称为消息泵,它是被设计用来使一个普通线程编程Looper线程,所谓的Looper线程就是循环工作的线程。这样的线程会不断循环,一旦有新任务则执行,执行完之后继续等待下一个任务。使用Looper类创建Looper线程只有两行核心代码:public原创 2015-07-20 23:32:08 · 421 阅读 · 0 评论 -
Java操作Excel文件以及将xls/xlsx转为csv文件
Java 读写Excel文件以及xls、xlsx文件转化为csv文件的陷阱原创 2016-05-23 23:56:59 · 22971 阅读 · 6 评论 -
android插入SQLite中文乱码问题
问题描述:Android开发中经常会遇到从txt、csv等文件中将数据加载到SQLite数据库中,而时常这些文件中都包含中文字符,如果不对编码作明确制定,则会采用默认的编码方式,此时便可能导致插入到数据库中包含中文的字段变成乱码,影响后续操作。解决方法:需要在读取文件时指定编码,如果包含中文,则需要指定为GB2312编码方式,如下所示:try { BufferedReader br = new B原创 2016-05-23 23:31:43 · 4402 阅读 · 2 评论 -
关于WebView无法加载含中文的链接
WebView是android开发中经常遇到的控件,调用webview.loadUrl(String str)函数时,当链接str中包含中文时,则会无法访问,比如:String urlStr = "http://218.241.27.245:8080/myFate/zhishidiaoyue/摆件/shengxiao_gou.html";webview.loadUrl(urlStr);此时便会无法原创 2016-04-29 11:10:42 · 1347 阅读 · 0 评论 -
设计模式及在Android中的应用 - 单例模式
首先了解一些单例模式的概念。 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 这样做有以下几个优点 • 对于那些比较耗内存的类,只实例化一次可以大大提高性能,尤其是在移动开发中; • 保持程序运行的时候该中始终只有一个实例存在内存中 有如下经典的实现方式:public class Singleton { private static volatile原创 2017-05-19 23:55:30 · 405 阅读 · 0 评论 -
设计模式及在Android中的应用 - Builder模式
1. 了解Builder模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 光看定义并不能理解究竟啥是Builder模式,通过一个具体的实例就会十分清晰。我们顶一个Person类,该Person类包含很多属性,比如name、age、gender、weight等,并且允许这些属性可以不设置,允许为空,则该类的定义如下:public class Person {原创 2017-05-22 00:08:36 · 336 阅读 · 0 评论 -
Android Studio解决创建项目build 卡顿
本地配置gradle原创 2017-06-26 00:37:12 · 894 阅读 · 0 评论 -
批量操作资源或控件 - 使用Resources.getIdentifier获取id
背景介绍在实际开发过程中,有时会遇到需要批量创建控件、批量读取并处理drawable文件,如果是通过写死xml并挨个从drawable中取资源那就太慢太繁琐了,那么有没有想过,针对结构化的drawable资源或者xml中的控件id,可以通过构建字符串数组的方式实现单行循环操作呢?下面介绍两种方法用于批量读取drawable资源文件和xml中的控件。解决方案不管是通过findViewById获取xml原创 2017-07-25 00:00:03 · 3005 阅读 · 0 评论