<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sunbinkang的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sunbinkang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sunbinkang]]></copyright><item><title><![CDATA[Android JNI系列详解之ndk-build工具的使用]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/132529465</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/132529465</guid><author>sunbinkang</author><pubDate>Thu, 31 Aug 2023 00:07:58 +0800</pubDate><description><![CDATA[Android.mk是ndk-build编译必配的一个文件，Application.mk是可选配的（如编译的目标库未使用C/C++标准库，也不需要指定cpu指令集对应的abi），如果未配置Application.mk会走默认的这些配置。Android.mk：用于向ndk-build编译工具描述源文件和库的信息，如要生成什么类型的库（动态、静态），库的名称，以及生成库使用了哪些C/C++源码文件，或者使用了哪些第三方库文件，等等。这时候去运行项目，会出现崩溃，错误是找不到libhaha.so。]]></description><category></category></item><item><title><![CDATA[Android JNI系列详解之ndk编译工具环境变量配置]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/132529128</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/132529128</guid><author>sunbinkang</author><pubDate>Sun, 27 Aug 2023 23:07:15 +0800</pubDate><description><![CDATA[这里是因为我在c:\Users\86157目录下没有相关的配置文件，所以打印的这个。如果是正式项目下有Android.mk和Application.mk配置文件，就可以正式的进行编译了。下节介绍如何使用ndk-build进行编译。之前是只介绍了CMake编译工具的使用，现在介绍另一种原生（NDK自带的脚本工具）自带的编译方式：ndk-build，想要使用ndk-build编译工程，我们需要配置全局的环境变量。找到ndk在电脑上的安装路径，没有的可以点download下载，我这个也是刚在as下载的。]]></description><category></category></item><item><title><![CDATA[Android JNI系列详解之生成指定CPU的库文件]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/132528551</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/132528551</guid><author>sunbinkang</author><pubDate>Sun, 27 Aug 2023 22:46:19 +0800</pubDate><description><![CDATA[如上图所示，不同手机使用了不同的cpu，不同的cpu支持不同的指令集，每种指令集有对应的二进制接口abi（arm64-v8a、armeabi-v7a、x86、x86_64就是四种abi类型 ），就是二进制库文件。其中手机常用的是arm64-v8a、armeabi-v7a，平板和虚拟机上更多的是x86、x86_64。如上图所示，是我们之前使用CMake工具默认生成的四种cpu架构的动态库文件：arm64-v8a、armeabi-v7a、x86、x86_64，分别对应对四种不同cpu类型的支持。]]></description><category></category></item><item><title><![CDATA[Android JNI系列详解之CMake配置库文件的输出目录]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/132484716</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/132484716</guid><author>sunbinkang</author><pubDate>Fri, 25 Aug 2023 00:09:10 +0800</pubDate><description><![CDATA[如果遇到了，意思是有重复的库文件，就是build下有一份会被加载进项目，jniLibs这个指定的目录也会加载进项目。1.默认的库文件输出路径：app/build/intermediates/cmake/debug/obj。是指与CMakeList.txt所在目录的同级目录：jniLibs (如果没有会新建)生成库文件时，采用gradle配置的ABI策略（即：生成哪些平台对应的库文件）是指 cmake库的源路径，通常是build/.../cmake/​​​​​这是我在项目中加的代码。]]></description><category></category></item><item><title><![CDATA[Android JNI系列详解之CMake编译工具的使用]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/132462961</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/132462961</guid><author>sunbinkang</author><pubDate>Thu, 24 Aug 2023 23:41:14 +0800</pubDate><description><![CDATA[如图所示，CMake工具的主要作用是，将C/C++编写的native源文件编译打包生成库文件（包含动态库或者静态库文件），集成到Android中使用。]]></description><category></category></item><item><title><![CDATA[Android JNI系列详解之AS创建Native C++项目]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/132439181</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/132439181</guid><author>sunbinkang</author><pubDate>Tue, 22 Aug 2023 23:48:00 +0800</pubDate><description><![CDATA[Android Studio版本：Android Studio Electric Eel | 2022.1.1 Patch 1。6.buil.gradle中也自带了CMakeList的配置（包含CMakeList的路径和版本）界面显示的字符串来自于C++的代码，说明Java调用C++代码成功。8.编译运行之后的库文件在build目录下。2.选择新建Native C++项目。4.选择C++标准库的支持版本。5.项目自带的默认生成的代码。7.C++代码的实现。9.默认程序运行效果。]]></description><category></category></item><item><title><![CDATA[Android JNI系列详解之JNI、NDK环境搭建和编译工具安装]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/132397970</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/132397970</guid><author>sunbinkang</author><pubDate>Sun, 20 Aug 2023 23:34:10 +0800</pubDate><description><![CDATA[JNI属于Java中的一部分，所以只需要搭建Java环境就有了JNI的环境，安装Java的环境可以网上查找教程，很多的安装JDK的博客。本地开发工具包：通过AndroidStudio下载：SDK Manager->SDK Tools->NDK。在上面的第三步安装好了NDK，就自带了ndk-build工具。因此我电脑已经拥有了ndk-build工具。本文主要介绍JNI、NDK环境变量的搭建，以及CMake工具的安装和ndk-build工具的安装。]]></description><category></category></item><item><title><![CDATA[Android JNI系列详解之CMake和ndk-build编译工具介绍]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/132397566</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/132397566</guid><author>sunbinkang</author><pubDate>Sun, 20 Aug 2023 22:58:56 +0800</pubDate><description><![CDATA[CMake：cross platform make，是跨平台的编译工具CMake是在AndroidStudio2.2之后引入（目前默认的NDK编译工具），使用时配合CMakeList.txt和gradle。对C++的配置：默认配置了libc++；默认启用了C++异常；默认启用了RTTI（运行时类型识别）]]></description><category></category></item><item><title><![CDATA[Android JNI系列详解之NDK和JNI介绍]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/132396222</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/132396222</guid><author>sunbinkang</author><pubDate>Sun, 20 Aug 2023 22:38:20 +0800</pubDate><description><![CDATA[而在Android中，Java或者kotlin代码编写程序，也是需要先生成classes文件，在Android还需要将classes文件使用dx工具打包成dex文件（会将classes中冗余的信息去除，会比class文件少很多，文件少就会减少io的操作，提高了类的查找速度），然后dex文件经过Android的虚拟机Dalvik/ART（与JVM虚拟机不同的是，android虚拟机基于的是CPU寄存器，而JVM基于的是堆栈，CPU寄存器的性能要比堆栈的高）翻译成机器码，才能给到设备执行。]]></description><category></category></item><item><title><![CDATA[十进制数负数转为十六进制补码的步骤]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/129597367</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/129597367</guid><author>sunbinkang</author><pubDate>Thu, 16 Mar 2023 20:04:26 +0800</pubDate><description><![CDATA[3、将0110取反码1001，补齐8位：11111001；4、将反码加一：11111010；3、将二进制取反码，补齐成8位；4、将上面的反码加一得到补码；5、补码就可以转成十六进制；2、将绝对值先转成二进制；2、对应的二进制位110；1、先将负数取绝对值；]]></description><category></category></item><item><title><![CDATA[Android开发常见的报错问题（持续更新记录）]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/126329011</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/126329011</guid><author>sunbinkang</author><pubDate>Sun, 14 Aug 2022 10:50:17 +0800</pubDate><description><![CDATA[Android开发常见的报错问题更新]]></description><category></category></item><item><title><![CDATA[Android三方依赖冲突及Gradle的exclude使用]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/126055548</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/126055548</guid><author>sunbinkang</author><pubDate>Mon, 01 Aug 2022 00:09:13 +0800</pubDate><description><![CDATA[介绍了Android查看项目中使用到那些依赖库的几种方案，以及介绍了Android中使用exclude如何处理依赖库存在冲突的问题。当然解除依赖库冲突不止这一种方案，但这种我觉得是比较方便的一种。]]></description><category></category></item><item><title><![CDATA[Android性能分析之---启动卡顿优化]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/125128651</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/125128651</guid><author>sunbinkang</author><pubDate>Sun, 05 Jun 2022 12:46:51 +0800</pubDate><description><![CDATA[Android冷启动性能优化]]></description><category></category></item><item><title><![CDATA[Android性能分析之---卡顿分析]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/125053293</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/125053293</guid><author>sunbinkang</author><pubDate>Thu, 02 Jun 2022 00:55:37 +0800</pubDate><description><![CDATA[一、性能分析---场景

 低性能的APP常见的表现有启动/界面切换慢、动画掉帧、卡顿（启动卡，点击按钮卡，进入新页面卡等）、耗电，甚至出现应用无响应、程序崩溃的现象。当我们着手解决这些性能问题时，面对的第一个问题就是需要找到合适的工具来检测这些问题，用肉眼观察来判断定位这类问题是不靠谱的。理想的检测工具要能做到两点：



· 一是可以定性的告诉我们应用是否有低性能问题，并且能定位到的点，指出哪个逻辑哪个方法使用系统资源低效，以便我们针对具体的问题给出对应的优化方案；

· 二是可以定量说明问题...]]></description><category></category></item><item><title><![CDATA[adb的screenrecord录屏功能]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/124956528</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/124956528</guid><author>sunbinkang</author><pubDate>Tue, 24 May 2022 22:57:12 +0800</pubDate><description><![CDATA[一、开始录屏命令：


adbshellscreenrecord/sdcard/launch.mp4


如果adb加入了环境变量，直接Win+R，输入cmd打开命令终端，输入上面的命令。前提是你要连接好了设备。





这时候你就可以操作手机，需要结束的时候就按ctrl+c就行，文件就保存在手机的SD卡的根目录。

二、指定视频分辨率大小，带上参数 --size


adbshellscreenrecord--size1280*720/sdcard/launch.mp4

（录制视频，...]]></description><category></category></item><item><title><![CDATA[android支持AndroidX的属性配置]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/124910259</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/124910259</guid><author>sunbinkang</author><pubDate>Sun, 22 May 2022 14:30:30 +0800</pubDate><description><![CDATA[一、AndroidX

AndroidX 是对 android.support.xxx 包的整理后产物。由于之前的 support 包过于混乱，所以，Google 推出了AndroidX。（v4包、v7包什么的都不用了，直接用androidx代替了）

当我们的项目需要支持Google的AndroidX的时候，一般需要配置两个属性：

android.useAndroidX=true 表示“Android插件会启用对应的AndroidX库，而非Support库”；未设置时默认为false；
android.]]></description><category></category></item><item><title><![CDATA[Android aidl一个service同时绑定多个客户端client]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/124874522</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/124874522</guid><author>sunbinkang</author><pubDate>Fri, 20 May 2022 00:17:13 +0800</pubDate><description><![CDATA[一、场景

最近开发过程中，遇到了这样的场景，aidl在service和client通信的过程中，一个service需要同时绑定多个client进行通信。

一开始我的想法是：



这种写法绑定多个客户端是有问题的，绑定了一个没有解绑的话，其他client是不会走这个onBind方法。

因为这是Android四大组件之一的Service的机制决定的。一个service经过bindService之后，再次去bindService，是不会再走onBind回调的。

二、解决办法（一个Service返回多种B]]></description><category></category></item><item><title><![CDATA[Android aidl双app进程通信详细讲解]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/124605887</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/124605887</guid><author>sunbinkang</author><pubDate>Fri, 06 May 2022 23:46:21 +0800</pubDate><description><![CDATA[一、场景


公司项目里用了很多的独立进程的服务与其他进程之间存在了很多跨进程的通信。之前有很长一段时间没有实际去做跨进程通信 AIDL了，查阅了一些资料和文章看了些 Demo 把温习的心路历程介绍一下。

工具

Android studio

小米手机Android11（api 30）

模拟器手机Android8 （api 26）

为什么要准备两个手机，因为这里Android高版本的aidl使用有点坑的地方，需要做兼容处理，后面会讲到原因。


二、创建aidl的服务端 AIDL...]]></description><category></category></item><item><title><![CDATA[Kotlin的构造函数Constructor]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/124600421</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/124600421</guid><author>sunbinkang</author><pubDate>Fri, 06 May 2022 00:04:05 +0800</pubDate><description><![CDATA[一、构造函数

kotlin里面的构造函数分为主构造函数和次构造函数。主构造函数只能有一个，次构造函数个数不限制，可以有一个或者多个。

1.主构造函数


//一般的主构造写法
class Student constructor(){
    
}

//当主构造方法没有任何注解或者可见性修饰符时，可以省略()，写成下面这样
class Student {
    
}

//主构造方法如下，跟在类名后面，有参数
class Student constructor(name:String)...]]></description><category></category></item><item><title><![CDATA[android使用AS新建项目时 use legacy android.support libraries]]></title><link>https://blog.youkuaiyun.com/sunbinkang/article/details/124592368</link><guid>https://blog.youkuaiyun.com/sunbinkang/article/details/124592368</guid><author>sunbinkang</author><pubDate>Thu, 05 May 2022 22:48:50 +0800</pubDate><description><![CDATA[一、使用Android Studio新建项目提示是否勾选use legacy android.support libraries



use legacy android.support libraries（勾选了这个框，就表示你要使用遗弃的support库）

using legacy android support libraries, will prevent you from using the latest Play Services and jetpack libraries.（使用遗留的an]]></description><category></category></item></channel></rss>