Android
TYYJ-洪伟
努力成为一名匠人。
展开
-
Android app 首次运行违规读取 Mac 地址定位方法
通常意义上来说,app 可以读取 mac 地址,但仅限于用户已经阅读了隐私内容,并且隐私内容中也告知了用户,app 会运行期间采集 wlan mac 地址等信息。所以如果没等用户同意隐私政策中的内容,就开始提前读取 mac 地址,这是不合法的行为。工信部抽查中如果发现此类行为,app 会被通告整改,整改不力的将强制从应用市场下架,后果还是很严重的。但这里忽略一个问题,如果我们的 app 本身代码没有读取 mac 地址,那如何是好?自己的代码心中有数,实在不行可以全局搜索,如果第三方库偷偷摸摸的读取 mac原创 2020-12-17 06:20:28 · 8472 阅读 · 5 评论 -
libmatroska 与 libebml 在 Android 平台上使用
上一节《libmatroska 与 libebml 移植到 Android 支持 mkv 格式解析与创建》成功编译了 Android 平台可用的 libmatroska.so 和 libebml.so。具体如何使用它们还没开始,这一节以创建 mkv 格式为例对它们进行使用。当然还要排坑!这花费了我不少力气去找到库中的 bug。一、使用 libmatroska 与 libebml首先在 Android Studio 中新建一个 Project。复制上一节编译出的 so 和 头文件到 libs/ 路径下原创 2020-05-11 18:05:58 · 852 阅读 · 0 评论 -
libmatroska 与 libebml 移植到 Android 支持 mkv 格式解析与创建
Matroska 多媒体容器(Multimedia Container)是一种开放标准的自由的容器和文件格式,是一种多媒体封装格式,能够在一个文件中容纳无限数量的视频、音频、图片或字幕轨道。所以其不是一种压缩格式,而是 Matroska 定义的一种多媒体容器文件。其目标是作为一种统一格式保存常见的电影、电视节目等多媒体内容。在概念上 Matroska 和其他容器,比如 AVI、MP4 或 ASF(Advanced Streaming Format,即高级流格式)比较类似,但其在技术规程上完全开放,在实现上包原创 2020-05-11 18:00:57 · 1053 阅读 · 0 评论 -
Android ADB命令整理,你不知道的玩法都在这里!
1.Android 调试桥概述Android 调试桥 (adb) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。该工具作为一个客户端-服务器程序,包括三个组件:客户端,该组件发送命令。客户端在开发计算机上运行。您可以通过发出 adb...原创 2020-01-16 09:08:19 · 1024 阅读 · 0 评论 -
在Android Studio中实现360加固自动化,进一步提升生产力!
完全人工的方式去360加固网站或使用其PC客户端加固APK耗时费力,都是些机械的步骤,消磨大量时间。当查阅360加固使用文档会发现360加固支持命令行加固。加固保桌面助手支持命令行模式,即在命令行输入相关命令可执行加固应用、导入签名信息、导入多渠道配置信息等操作。这些固定的步骤是否可以简化?答案是显然的。原创 2017-10-11 22:31:24 · 5159 阅读 · 0 评论 -
【JNI编程】JNI中进行线程同步
JVM可以做到在相同的地址空间内执行多个线程。由于多个线程可能会在同时共享资源,所以,增加了程序的复杂性。一、预备知识1.1 约束限制如果你的本地代码要运行在多个线程中,有一些约束条件需要注意,这样的话,才能使得你的本地代码无论被多少个线程同时运行,都不会出现问题。JNIEnv指针只在它所在的线程中有效,不能跨线程传递和使用。不同线程调用一个本地方法时,传入的JNIEnv指针是不同的。...原创 2019-02-01 09:02:18 · 1786 阅读 · 1 评论 -
【JNI编程】深入理解JNI内存泄漏
JAVA 编程中的内存泄漏,从泄漏的内存位置角度可以分为两种:JVM 中 Java堆的内存泄漏和JVM 内存中 native memory 的内存泄漏。从操作系统角度看,JVM 在运行时和其它进程没有本质区别。在系统级别上,它们具有同样的调度机制,同样的内存分配方式,同样的内存格局。JVM 进程空间中,Java Heap 以外的内存空间称为 JVM 的 native memory。进程的很多资...原创 2019-01-30 09:09:27 · 1562 阅读 · 1 评论 -
【JNI编程】实现JNI的两种方法
通常来说我们使用JNI,Java层中对应的接口方法在本地代码中有对应的方法实现。一、通过动态链接器根据条目的名称解析通过动态链接器根据条目的名称解析条目。本地方法名称由以下组件连接而成:前缀Java_一个全限定类名下划线(" _ ")分隔符一个方法名对于重载的本地方法,两个下划线(“__”)后面跟着参数签名VM检查方法名与驻留在本地库中的方法是否匹配。VM首先查找短名称;即没有...原创 2019-01-31 08:55:41 · 869 阅读 · 0 评论 -
【JNI编程】JNI中使用Linux本地线程
我们知道Android系统内核是使用Linux实现的,那么在Android OS中JNI实现的本地代码中实际使用的是Linux线程,这就需要pthread支持。一、涉及pthread方法Linux下用C开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread。头文件#include<pthread.h>1.1 pthread_createpthre...原创 2019-01-31 08:56:36 · 456 阅读 · 0 评论 -
【JNI编程】JNI异常
Java中异常处理非常简单,我们直接在Java代码中try…catch…即可。假设使用JNI技术在native代码中调用Java方法,而这个Java方法有可能抛出异常,如何在JNI中进行异常处理呢?我们又想在JNI中抛出异常具体怎样操作?这些问题都会在JNI编码中进行涉及。一、API回顾1.1 Throwjint Throw(JNIEnv *env, jthrowable obj);导致...原创 2019-02-22 13:36:16 · 1624 阅读 · 0 评论 -
【JNI编程】JNI数组使用
我们经常遇到在native代码中处理数组的需求,JNI中数组的使用可以说是基本功。下面的例子演示了如何在JNI中获取数组的长度,JNI获取Java层的数组并使用等。一、涉及API1.1 GetArrayLengthjsize GetArrayLength(JNIEnv *env, jarray array);返回数组中元素的数量。LINKAGE:JNIEnv接口函数表中的索引171。...原创 2019-02-18 19:35:04 · 1836 阅读 · 0 评论 -
FFmpeg编译多android cpu架构版本
FFmpeg 编译android OS使用的库,通常我们作为简单测试只需要编译arm-v7a版本so文件就可以满足。但为了兼容arm最新架构v8a我们需要编译v8a版本的so,用来支持arm64版本的CPU。为了增强ffmpeg的功能,通常我们都集成x264进行编译。一、预备编译系统:ubuntu 14.04 LTSFFmpeg版本:ffmpeg-3.2.10x264版本:x264-sn...原创 2019-06-05 19:19:48 · 1369 阅读 · 1 评论 -
Android APP基于Android Studio多版本构建实战
Android APP基于Android Studio多版本构建实战,通过只敲一个命令生成所有版本原创 2017-05-21 20:24:37 · 2124 阅读 · 0 评论 -
Android常用数据库ORM框架ORMlite和GreenDao比较
Android常用数据库ORM框架ORMlite和GreenDao比较,包含DEMO工程文件原创 2016-01-03 13:47:32 · 7293 阅读 · 0 评论 -
写一个弹出样式的多行文本输入界面,如何选择呢?
一、打造一个带横格子的输入控件多行文本样式的输入界面,我们首先联想到的是EditText,这一点问题都没有,但EditText貌似不能满足需求,需要实现每一行下面都带有一个横线,这就像我们小时候的横格子作业本。那么自然想到的是继承控件EditText去自定义控件,还是没有具体的实现想法。我们知道,google android给我们的例子里面记事本NotePad其实是有实现这个功能的,那就赶原创 2015-07-25 12:28:09 · 3145 阅读 · 2 评论 -
图片随机小角度堆叠效果,可用于相册缩略图叠加样式【长宽最优化】
最近项目需求实现一个类似的图片堆叠效果,用于相册的封面展示效果,让用户一眼就可以看出里面其实涵盖了多张图片。原理当然是图片随着中心点旋转,多次随机旋转并绘制到Canvas上,如果直接旋转bitmap你会发现有黑色背景,因此根本不能满足预期效果,所以需要先建立一块空的画布,容纳后面旋转角度后绘制到画布上的所有图片,这里引出一个问题,建立多大的空白画布呢?如果使用矩形的对角线做为画布的长宽那自然是可以原创 2015-07-18 16:27:43 · 2139 阅读 · 1 评论 -
软件内每日提醒功能,可整合到工程中
一、原理简介每次向AlarmManager里写入提醒时间,当到达提醒时间激活一个广播接收器,进行相应的提醒窗口弹出或通知,并进行下一次闹钟设置。注意重启的时候需要监听系统的广播,并进行重新设置闹钟,大致原理就是这样。设置闹钟用到如下代码:AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SE原创 2015-07-12 20:23:41 · 985 阅读 · 1 评论 -
打造一个可分割的华丽圆形进度条,适合倒计时等场景
自定义可分割圆形进度条,适合倒计时等场景,这个进度条不是那种实体的环形进度条,而是被等分了N个部分的。原创 2015-06-13 12:39:22 · 2665 阅读 · 1 评论 -
高仿今日头条字体渐变指示器,滑动+点击切换,如丝顺滑
今日头条的指示器很炫酷,随着你的滑动字体颜色可以逐渐的变化,实现方法主要是使用自定义控件结合ViewPager。原创 2015-04-26 15:01:04 · 3230 阅读 · 0 评论 -
图片局部放大镜,可在大图上下左右移动并放大对应的区域
现实中使用放大镜可以放大对应的区域,软件中有时候也会用到放大镜功能,比如图片上某一点看不清楚,你不需要将整张图片都放大,只需要放大你想看到的部分,这个时候放大镜就派上用场了。1.实现原理如何实现放大镜的原理呢?一种方式我们可以采用将原图中的局部区域提取裁剪,然后在图片顶层的自定义控件上放大对应的倍数展示即可;另外一个种方式是将整图都放大相应的倍数,然后截取需要显示的区域,间接实现放原创 2015-08-16 11:54:34 · 6921 阅读 · 0 评论 -
Android下发送邮件功能总结
最近项目用到邮件发送功能,自然联想到掉起手机自带的邮件APK,但太过于依赖于系统的邮件apk,如何你需要默默后台发送邮件,这种功能显然是无法满足的,经过查阅资料基本可以找到两种现有的解决方案。1、第一种使用commons-net-3.3.jar此jar可以实现简单的邮件发送,如果你只需要发送简单的文本邮件,这个包就可以满足需求。这个包封装的还是比较好的,监听接口等都很完善,使用也非原创 2015-08-15 23:29:16 · 4863 阅读 · 2 评论 -
MPAndroidChart之雷达图学习笔记
关于MPAndroidChart就不多说了,是一个开源的android图表库,包含折线图、柱状图、散点图、雷达图等等。最近项目需要使用雷达图,可以清晰的表达出每个维度的数据偏好,非常直观,决定采用MPAndroidChart这个开源库实现。雷达图是RadarChart这个控件,我们需要先在layout中使用这个自定义控件,如下:<RelativeLayout xmlns:andr原创 2015-09-05 21:44:06 · 7482 阅读 · 8 评论 -
Android实现FTP客户端服务端多图下载【两部android手机之间传输】
一、背景介绍关于FTP下载,FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传原创 2015-09-13 19:47:16 · 7621 阅读 · 0 评论 -
使用html写一个android关于界面,事情原来可以如此简单
当软件开发进入尾声,我们都会给软件配上个关于帮助界面 ,关于界面一般都会包含软件名称、软件版本、官方群号、官方公众号、感谢等等的一系列内容,这些内容往往都是一个陈列展示的内容,我们不得不使用一大堆TextView排版,不能灵活控制这些内容,有没有更好的方法呢,我个人觉得使用些简单的HTML知识,结合javascript就能灵活的控制关于帮助页面了。HTML页面中的文字都可以随意改变,如原创 2015-11-07 12:15:20 · 11679 阅读 · 3 评论 -
调用第三方打印apk Epson iPrint解决思路
调用第三方打印apk Epson iPrint解决思路,目前仅有一个apk,爱普生打印,如何调用起来这个第三方apk?原创 2015-11-21 09:34:45 · 6350 阅读 · 0 评论 -
Android实现List<String>存储到SharedPreferences工具类
轻量级的数据,需要保存到SharedPreferences中,但只能保存一些整形、Long、布尔型、字符串,类似List存储没有实现,当然你可以选择存储到本地sqlite数据库,考虑到自己的需求来看,如果本身数据较少,比如说用户创建的文件夹名称,用于分类一些图片,用户不可能创建成千上万个名称保存的,所以没必要增加数据库,增加了反而提升了复杂度。另外android也是可以存储数组到SharedP原创 2015-07-25 14:41:57 · 8674 阅读 · 2 评论