自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(126)
  • 资源 (19)
  • 收藏
  • 关注

原创 Android JNI使用dlopen动态链接库

具体来说,dlopen 函数可以接受一个共享库的路径作为参数,并返回一个句柄(handle),该句柄用于后续操作,例如通过 dlsym 获取库中的函数地址,以及通过 dlclose 关闭已加载的库。在 Android 开发中,dlopen 通常与 JNI(Java Native Interface)一起使用,以便在 C/C++ 层加载第三方库,并在 Java 层中调用这些库中的函数。它的主要作用是在程序运行时动态地加载共享库,使得程序可以在不重新编译的情况下加载并使用库中的函数和变量。

2024-04-17 17:45:55 402

原创 dlopen failed: library “libsdrv-shm.so“ not found: needed by

日志看是App找不到对应的库,但是在/vendor/lib64目录下找到了libsdrv-shm.so,一番尝试后发现是因为权限问题,可以将目标so添加进白名单,在对应文件中添加需要依赖的库重启生效。JNI开发接入第三方动态库运行出错。

2024-03-29 17:07:11 102

原创 Android JNI开发定义全局变量

在C++中,如果你希望在多个源文件中共享同一个全局变量,你需要在其中一个源文件中进行定义,而其他源文件则需要对该全局变量进行声明。这样,其他源文件就可以通过包含 common.h 头文件来访问这个全局变量了。要在 C++ 文件中设置一个 string 类型的全局变量,让其他 C++ 文件都可以访问,并且可以通过 JNI 方法修改这个变量,可以按照以下步骤进行操作。在一个 C++ 文件中实现全局变量: 在一个 C++ 文件中实现这个全局变量,并提供一个 JNI 方法来修改这个全局 string 变量。

2024-03-28 19:35:49 523

原创 Android CMakeLists.txt不同渠道加载对应目录动态库

要在 Android JNI 开发中的 CMakeLists.txt 文件中根据不同渠道加载不同的动态库,可以通过在 build.gradle 中定义 productFlavors,并为每个 flavor 指定不同的 CMake 变量,然后在 CMakeLists.txt 中根据这些变量来加载对应的动态库。根据 FLAVOR1 和 FLAVOR2 变量的设置,选择加载不同的 native-lib 动态库。2. 在 CMakeLists.txt 文件中,可以根据这些变量来选择加载不同的动态库。

2024-03-28 14:54:22 537

原创 Android 子module添加渠道配置异常

检查后发现是主module和子module的flavorDimensions配置不一致导致,flavorDimensions允许你在定义多个产品风味时,将它们分组到不同的维度中。这样可以使得每个产品风味只能选择一个维度进行组合,而不会出现混乱或冲突的情况。

2024-03-28 11:33:32 625

原创 android JNI float *转MutableList

【代码】android JNI float *转MutableList。

2024-03-11 19:25:58 333

原创 Chrome安装Axure插件

打开原型目录/resources/chrome,重命名axure-chrome-extension.crx,修改后缀为rar,axure-chrome-extension.rar解压到axure-chrome-extension目录打开Chrome,更多工具->扩展程序,打开开发者模式,选择加载已解压的扩展程序,即可完成安装

2024-03-07 18:53:48 511

原创 使用DialogFragment实现自定义视图

要使用 DialogFragment 实现一个自定义的包含自定义视图的对话框,可以创建一个布局文件来定义您想要显示的自定义视图,然后在DialogFragment 中加载该布局文件并显示出来。在需要显示自定义视图对话框的地方(如 Activity 中),通过创建并显示 CustomViewDialogFragment 实例来呈现对话框。首先,创建一个 XML 布局文件(例如 custom_dialog_layout.xml),用于定义自定义的对话框视图。

2024-03-06 16:50:06 198

原创 Android使用AtomicReference

AtomicReference 是 Java 中用来提供原子操作的类之一,它可以在多线程环境下安全地对对象引用进行读取和更新操作。在这个示例中,我们创建了一个 AtomicReference 对象 atomicReference,并使用 set 方法在多个线程中同时修改参数的值。然后使用 get 方法获取最终的参数值,并打印出来。通过使用 AtomicReference,我们可以确保对对象引用的操作是线程安全的,从而避免在多线程环境下出现竞态条件和不一致性的问题。

2024-02-29 10:16:57 240

原创 Android使用OpenCV裁剪和旋转

【代码】Android使用OpenCV裁剪和旋转。

2024-02-26 10:12:49 139

原创 Android获取App第一次安装时间

【代码】Android获取App第一次安装时间。

2024-01-23 12:05:56 435

原创 Python使用CBC加密模式进行AES加密

我们首先使用 Cipher 类来创建一个 AES 密码器对象,指定所需的 AES 算法、CBC 加密模式和密钥。然后,我们获取密码器的加密器,并使用 PKCS7 填充方式创建一个填充器对象。我们使用填充器对明文进行填充,得到经过填充的明文。请注意,在使用 CBC 模式时,需要确保密钥和初始向量在加密和解密过程中是一致的。同样,确保在 Android 和 Python 中使用相同的密钥格式、字符编码、填充方式和初始向量,以确保生成的加密结果一致。接下来,我们使用加密器对填充后的明文进行加密,得到密文。

2024-01-22 20:13:02 472

原创 Binder通信权限校验

在 onBind() 方法中使用 checkCallingOrSelfPermission() 方法来检查客户端是否具有 CUSTOM_PERMISSION 自定义权限。如果客户端没有该权限,则返回 null,否则返回服务的 IBinder 对象。在客户端的清单文件(AndroidManifest.xml)中定义自定义权限。

2024-01-18 14:57:58 354

原创 Android 自定义权限

在 Android 项目的清单文件(AndroidManifest.xml)中,找到 标签,并在标签内部添加一个 元素。该元素用于定义自定义权限的名称、保护级别和其他属性。android:protectionLevel 是在 Android 清单文件中 元素中用于指定权限保护级别的属性。它决定了应用程序访问敏感资源或执行敏感操作时对权限的要求和限制。需要授予或检查自定义权限的组件(如活动、服务、接收器等)中,使用 元素声明对自定义权限的依赖。

2024-01-18 14:48:58 715

原创 Android在系统界面上添加窗口

然后创建了一个自定义的MyView对象,作为要添加的窗口的内容。接下来,创建了WindowManager.LayoutParams对象,用于指定窗口的各种属性,比如宽度、高度、位置等。最后,通过windowManager.addView()方法将自定义的View添加到WindowManager中,从而将其显示在屏幕上。WindowManager.addView()是Android中的一个方法,用于在屏幕上添加一个窗口。它允许你在应用程序的上下文之外创建一个窗口,并将其显示在其他应用程序或系统界面上。

2024-01-17 14:22:50 785

原创 Android修改Spinner默认文字颜色

在上述代码中,我们通过找到android.R.id.text1来获取Spinner的默认TextView,并设置其文字颜色为红色。要修改Spinner(下拉选择框)的默认文字颜色,你可以使用自定义的Spinner适配器,并重写getView()方法来设置文字颜色。通过以上步骤,你可以修改Spinner的默认文字颜色。如果你想进一步自定义Spinner的样式,还可以创建自定义的Spinner样式。在代码中,我们创建了CustomSpinnerAdapter,并将其设置为Spinner的适配器。

2024-01-11 20:13:36 747

原创 adb forward使用

adb forward是Android Debug Bridge(ADB)的一个命令,它可以将设备端口和主机端口之间建立一个转发通道,从而使主机可以通过该通道访问设备端口提供的服务。使用adb forward可以方便地进行端口转发,例如在电脑上运行的应用程序需要与设备上运行的服务进行通信时。需要注意的是,如果在转发期间遇到任何问题,可以通过执行adb forward --list命令来查看当前的端口转发列表。其中,表示主机端口,表示设备端口。其中,表示要取消的主机端口。将设备端口转发到主机端口。

2024-01-10 16:44:13 1032

原创 Android集成OpenSSL实现加解密-JNI实现

使用OpenSSL方法实现AES加密和解密。

2023-12-28 17:01:25 994

原创 Android集成OpenSSL实现加解密-集成

将编译生成的 OpenSSL 动态库文件(.so 文件)复制到你的 Android 项目的 libs 目录中。build.gradle添加配置。修改CMakeLists.txt。

2023-12-28 16:51:59 775

原创 Android集成OpenSSL实现加解密-编译

这里的 android-arm 可根据你的需要选择不同的目标平台和架构,例如 android-arm64、android-x86 等。--prefix 参数是指定 OpenSSL 编译输出的目录,目录建议提前新建。前往 OpenSSL 官方网站(https://www.openssl.org/source/)下载最新的源码压缩包并解压,示例在WSL环境编译。前往https://developer.android.google.cn/ndk/downloads?hl=zh-cn下载NDK版本并解压。

2023-12-28 16:43:36 995

原创 Android实现获取和修改prop属性

在 Android 中可以使用反射来调用 SystemProperties 类中的 get() 和 set() 方法来获取和修改 prop 属性。

2023-12-27 10:48:51 917

原创 Android获取文件列表并排序

使用 Arrays.sort() 方法对文件数组进行排序。sort() 方法接受一个比较器(Comparator)作为参数,这里使用了 Lambda 表达式来实现比较器。Lambda 表达式的内容定义了如何比较两个文件的最后修改时间。如果第一个文件的最后修改时间更晚,则返回 1;如果第二个文件的最后修改时间更晚,则返回 -1;如果它们的最后修改时间相同,则返回 0。这段代码的作用是对指定目录下的文件按照最后修改时间进行降序排序。

2023-12-27 10:26:09 484

原创 工作中常用的工具

WinSCP 是一款开源的 Windows 平台下的 SFTP、FTP、WebDAV 和 SCP 客户端软件,它允许用户在本地计算机和远程服务器之间传输文件和目录。scrcpy 是一个免费、开源的 Android 设备投屏工具,它可以让你在电脑上显示并控制连接到计算机的 Android 设备。WinMerge 是一款 Windows 系统下的免费开源的文件比较/合并工具,它可以比较两个文件夹和文件,以一种易于理解和处理的可视文本格式呈现差异。

2023-12-27 10:15:18 367

原创 使用ZMQ.proxy实现ZMQ REQ消息转发

使用jeromq库实现 REQ 消息的转发,通过创建一个 ZMQ 代理来实现。

2023-12-26 17:49:48 410

原创 Android 获取wlan0地址

通过 getIPAddress 方法传入接口名称(这里是 “wlan0”)来获取相应接口的 IP 地址。使用 NetworkInterface.getNetworkInterfaces() 获取所有网络接口,并循环遍历找到指定名称的接口。然后获取该接口的所有地址,并找到非回环地址且地址长度为 4 的 IPv4 地址。

2023-12-26 15:02:30 628

原创 使用ZMQ.proxy实现ZMQ PUB消息转发

然后使用 zmq.proxy 方法将前端套接字的消息转发到后端套接字。最后在 finally 块中关闭套接字和上下文。创建两个 ZMQ.Socket 对象:一个作为前端套接字(frontend socket),另一个作为后端套接字(backend socket)。前端套接字接收来自客户端的消息,后端套接字将消息转发给服务端。它可以将消息从一个套接字传递到另一个套接字,实现消息的转发和路由。调用 ZMQ.proxy 方法:将前端套接字、后端套接字作为参数传递给 ZMQ.proxy 方法,以启动代理服务器。

2023-12-26 11:35:54 763

原创 Python 使用 ZMQ通信

创建一个 SUB 套接字来监听消息。

2023-12-26 11:03:37 471

原创 DevEco Studio Preview失败

点击File->Settings->Build, Execution, Deployment->Build Tools->Hvigor,取消勾选最后一项。安装DevEco Studio新建第一个项目后,点击Previewer预览失败,Preview failed。最后Build-> Clean Project,预览成功。

2023-12-20 12:15:41 2780 1

原创 Android共享元素动画

在目标 Activity 的 onCreate() 方法中,我们首先通过 supportStartPostponedEnterTransition() 方法来启动转场动画过渡。在 onTransitionEnd() 方法中,您可以执行动画结束后需要的操作。首先,在布局文件中定义两个界面的 SurfaceView,并为它们设置相同的 android:transitionName 属性。在源 Activity 中,当用户启动目标 Activity,并设置共享元素动画。

2023-12-12 18:06:10 339

原创 ReadTimeoutError: HTTPSConnectionPool(host=‘files.pythonhosted.org‘, port=443): Read timed out.

pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com。pip install 出错。临时解决方法,修改PIP源。

2023-11-17 14:32:30 71

原创 Windows环境VSCode配置OpenCV-项目配置(二)

修改c_cpp_properties.json。需要修改mingw64的环境变量到git前。修改tasks.json。新建test.cpp。

2023-11-16 20:11:39 290

原创 Windows环境VSCode配置OpenCV-环境搭建(一)

MinGW-W64要下载。

2023-11-16 19:24:08 372

原创 Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported

【代码】Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported。

2023-11-14 18:55:27 452

原创 Android Studio 统计代码行数

点击项目的底部 Statistic。在settings中进行配置。下载Statistic插件。

2023-11-14 14:15:19 123

原创 Android 重启App

在上述代码中,我们首先获取应用程序的启动意图(launch intent)并将其封装为 makeRestartActivityTask 意图。然后,我们创建一个 PendingIntent 对象,使用 set 方法设置重启延迟时间(这里设置为 1 秒),并将其与 AlarmManager 关联。最后,我们调用 System.exit(0) 来完全退出当前应用程序。要重启 Android 应用程序,可以使用 PendingIntent 和 AlarmManager 来实现。

2023-11-02 19:35:48 622

原创 Android ActivityLifecycleCallback使用

通过实现 ActivityLifecycleCallbacks 接口,可以在 Activity 的创建、启动、暂停、恢复、停止和销毁等各个阶段执行相应的操作。需要注意的是,ActivityLifecycleCallbacks 是 API Level 14 (Android 4.0) 引入的功能,因此在使用时要确保目标设备的最低 API 等级满足要求。应用程序将会在每个 Activity 的生命周期事件发生时调用相应的回调方法,以便根据需要执行特定的操作,例如记录日志、收集统计数据或执行其他自定义逻辑。

2023-11-02 09:00:00 333

原创 Kotlin run 用法

【代码】Kotlin run 用法。

2023-11-01 09:00:00 197

原创 Kotlin this和it的使用区别

在这个示例中,我们定义了一个名为 MyClass 的类,并在 printValue 方法中使用了 this 关键字。在这个示例中,我们定义了一个名为 list 的列表,并使用 forEach 函数遍历列表。在 Lambda 表达式中,it 关键字引用接受 Lambda 参数的对象。在 Lambda 表达式中,this 关键字引用包含该 Lambda 的类实例。在 Kotlin 中,this 和 it 是两个关键字,用于引用不同的对象。在类或对象中,this 关键字引用当前对象本身。

2023-11-01 09:00:00 481

原创 Kotlin apply和with用法和区别

上面的示例中,我们使用 apply 函数修改了现有的 person 对象的属性。这个函数接受一个 lambda 表达式作为参数,该 lambda 表达式被应用于调用 apply 的对象,并可以在 lambda 中对对象进行任何操作。with 函数的第一个参数是一个对象,并且该对象将成为 lambda 表达式内部的上下文对象。apply 函数的作用对象是调用 apply 函数的对象本身。apply 是 Kotlin 标准库中的一个函数,它允许你在对象上执行一系列操作,然后返回该对象自身。

2023-10-31 16:08:07 1025

原创 Android Path.quadTo() 方法绘制二次贝塞尔曲线

在上面的代码中,我们创建了一个自定义的 View,并在构造函数中初始化了画笔和路径。我们使用 Path.moveTo() 方法将当前点移动到起始点 (100, 100),然后使用 Path.quadTo() 方法绘制了一条二次贝塞尔曲线,控制点的坐标为 (200, 50),终点的坐标为 (300, 100)。在 Android 中,可以使用 Path.quadTo() 方法绘制二次贝塞尔曲线。然后我们重写了 onDraw() 方法,在其中使用 Canvas 的 drawPath() 方法绘制了路径。

2023-10-31 09:00:00 389

从android源码中生成系统签名文件

从android源码中生成系统签名文件,使用系统签名生成系统权限Apk

2019-03-11

反编译Apk文件工具集合

反编译Apk文件工具集合,包括:jd-gui,dex2jar-2.0,apktool

2019-03-11

Android Ocr识别图片文字

Android使用tess-two开发Ocr识别图片文字!速度比较慢!

2017-11-07

android开发指纹识别

android开发指纹识别,测试小米,华为,android 6.0,7.0可以使用

2017-08-16

Android AndFix热修复demo

Android开发使用AndFix热修复demo

2017-08-01

GitHub Android客户端

根据GitHub客户端源代码生成的apk安装包

2017-02-13

Volley加载图片发送请求

Volley实现listView加载图片,发送请求,包含Volley.jar包

2015-07-24

android SwipeList左右划动Demo

android SwipeList左右划动Demo,简单实用!

2015-07-24

手机相册选取照片ViewPage显示

从手机相册选取照片,地址保存到数据库,通过ViewPage显示,菜单键可添加图片,长按删除图片,ViewPage定时划动

2014-11-20

xUtils四个模块简单demo

xUtils的简单demo,适合新手学习,注释详细,可以实现简单下载,http请求,图片显示,添加了下载进度条功能

2014-11-14

SlidingMenu框架所需library

android开发SlidingMenu开发所需要的library,

2014-11-14

ios开发拍照摄像并保存到相册

详细代码编写调用iphone摄像头拍照摄像头并保存到相册

2014-04-03

android上传文件添加文件描述工具

该工具类实现上传文件到服务端并添加文件描述功能

2013-12-23

ios开发获取手机唯一标识符和调用系统打电话拨号功能

ios开发获取手机唯一标识符和调用系统打电话拨号功能

2013-12-17

百度地图定位

android开发使用百度API定位显示当前位置

2013-12-17

android生成二维码并保存

android开发生成二维码并保存到本地

2013-12-17

ASIHttpRequest ios开发框架

ios开发框架 ASIHttpRequest 资源来源于网上 非原创

2013-10-24

phoneGap插件应用

ios开发使用plugin达到obj-c和phoneGap交互的目的

2013-10-24

ios九宫格锁屏

ios开发类似android的九宫格锁屏 资源来源于网上 非原创

2013-10-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除