自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 关于MacBook M1适配AndroidStudio

由于目前手里使用的是8G内存的M1笔记本,在开始安装AndroidStudio的时候,也没有注意什么,直接下载安装了Mac64位的,后来才发现那个是X86-64版本的,适配的是intel的芯片,而我的是M1芯片,所以平时Gradle的sync以及build,都异常耗时,短的时候三分钟,长的十分钟,随机器运行时间越长,卡顿也更明显。后来才知道有个M1版本的studio,就安装尝试一下,结果发现项目不能编译通过了。于是又上网查了一堆解决方案,遇到了一些坑,所以记录以下,希望能给后来人帮助。安装的过程

2021-09-26 09:45:34 3396

原创 算法练习心得

算法这东西,一直是令很多人头疼的东西(当然我也是),但是想做出高效的程序,还真离不开。其实很多算法已经集成进了各种编程语言的库,系统调用库,似乎足够用了。比如Java中的TreeSet使用红黑树存储元素,c++中的map用到了红黑树,linux内核在调度进程的时候也用到了红黑树。由此可见,高效的算法会很快推广,从系统到应用都可以派上用场。回想一下,工作中用得多吗,这个看情况,对于安卓客户端程序,用户有一个延迟体验的晃动值100-200ms(书上说的,哈哈),当然这不适用于游戏场景,如果超过100ms,体

2020-09-13 02:20:02 262

原创 Dialog不能全屏的问题

最近发现在使用自定义的Dialog时,发现总不能横屏铺满,尝试了很多设置布局参数的方法,都不见效,最后有效的方法是在自定义Dialog的onCreate()方法中添加DecorView的padding设置,DecorView默认是又padding值的,置为0就可以铺满屏幕。getWindow().getDecorView().setBackground(null);...

2020-05-11 20:02:54 1071

原创 android如何隐藏状态栏和导航栏

对与隐藏顶部的状态栏和底部的导航栏,可以使用如下方法,就是在Acticity的onCreate()方法中添加以下代码,(在setContentView()前)if (Build.VERSION.SDK_INT >= 19) { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibi...

2020-04-28 23:05:12 1917

原创 如何解决Error:No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android

目前对于这个问题,网上很多的解决办法是去下载ndk的编译链接库打开如下链接,这是Android开发者的官方网站https://developer.android.com/ndk/downloads/?hl=zh-cn然而我们发现这个地址不能访问,这就比较麻烦,其实还有一个简单的解决办法,那就是干掉ndk,如果你的项目中确实不需要native-code。怎么弄呢,实际上卸载ndk...

2020-04-08 22:35:16 451

原创 android中wifi的扫描流程

主要涉及的类和关键方法见下图。wifi的很多操作,如打开关闭wifi,扫描wifi列表都是由WifiManager.java来提供的,而WifiManager.java的实现又由WifiServiceImpl.java来完成。对于wifi的扫描操作,调用的方法就是getScanRsult(String callingPackage)。在执行扫描任务之前,Binder首先会检查调用者的UID...

2020-01-13 09:26:16 1302

原创 关于android中的Context

提到android,我们首先想到的是Activity,Service,BroadcastReceiver,ContentProvider,然而在使用这些组件的时候,却离不开Context今天就来研究一下Context。1.Context是什么Context是一个抽象类,位于frameworks\base\core\java\android\content目录下,它是一个提供app环境的全局...

2020-01-10 10:45:45 423

原创 关于andorid中录音app之间的冲突问题

在开发录音相关的app的时候,遇到了一个问题,那就是如果有一个录音app已经运行了,那么再运行你的录音软件,那么就会出问题,原因很简单,android的底层只允许开启一个线程去读取麦克风的数据,二者冲突就会导致程序无法正常运行,那么该如何解决这个问题呢,其实思路很简单,就是在运行你的录音app之前,判断一下是否有别的录音软件正在运行,基于这个思路,进行了以下尝试:1.我查看了AudioReco...

2020-01-03 11:29:46 2728 2

原创 安卓设备连接蓝牙时声音小的问题

在适配了蓝牙驱动后,用设备连接蓝牙音响,发现声音就算调节到最大,输出的声音还是很小,bluetooth中的config.xml也做了修改,但是没啥效果,查看了蓝牙相关的信息,发现设置的绝对音量值夜没啥问题,后来修改了系统属性persist.bluetooth.disableabsvol = false后,即允许使用绝对音量,问题得到解决。...

2019-12-14 11:17:28 6643

原创 Android中wifi和热点开关,以及模块插拔的一些状态逻辑

主要的开机启动,开关的关闭,模块插拔 ,驱动的加载卸载逻辑如下图。

2019-11-22 10:02:21 258

原创 android的input_event的流程,以及如何获取输入设备的相关信息

最近整理了一下android获取输入设备的过程,以及android的input_event从内核到framework的流程,涉及的关键类和函数见上图。1.如何获取输入设备的类型framework的Java层的MotionEvent.java有专门的方法来获取输入设备类型public final int getToolType(int pointerIndex) { ...

2019-11-14 18:17:26 1425

原创 android8.0热点打开流程,从Setting到framework

关键函数的调用流程如下:

2019-11-12 14:22:00 1078

原创 关于使用广播时遇到一些问题

fragment的生命周期和activity比较相似,不过更加复杂一些,具体如下:如果在fragment中注册了一些广播,那么注销广播的时候,需要放在onDetach()里面,如果放在onBackPressed(),会报运行时错误,也许用户点击两次返回键,才能退出fragment,所以注销广播还是应该放在fragment的生命周期的末尾,此外,重写生命周期的方法时,要调用父类的相关方法。...

2019-11-06 10:25:33 576

原创 c++中字符串,函数的一些小细节

#include <iostream>#include <string>#include <stdio.h>using namespace std;//函数复制的是指针变量的地址,所以传进来的地址,函数中运算的地址,返回的地址都一样。char* getPtr(char* p){ printf("param address:%p\n", p);...

2019-11-04 09:18:43 170

原创 关于c++中内存对齐的一些问题

假设有以下代码:#include <stdlib.h>#include <stdio.h>class A{ int a; short b; char c; int d;};class B{ double e; int f; short g; char h; };int main()...

2019-11-02 11:02:56 249

原创 在编译安卓系统时遇到的找不到out目录下的某个库的问题

具体问题描述如上图,本来是在mk文件中添加了一些源码和依赖库,但是编译出错,后来才发现原来是mk文件中添加这个库的那行代码的最后多了一个空格,而mk文件是不允许在行尾有空格的,这个需要特别小心,尤其是如果从别的编辑器把代码copy过来的时候,就会有这种情况,删除空格后问题解决。...

2019-10-15 17:03:11 279

原创 如何判断一个USB设备是否是麦克风

如何判断一个插入的设备是否是麦克风,大概有三种方法:1.如果知道该设备的vid,pid,那么就可以根据这个来匹配注册usb插拔的广播IntentFilter myFilter = new IntentFilter();myFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);myFilter.addAction(UsbMa...

2019-10-10 11:13:01 1031

原创 ActivityManager: Waited long enough for:****Service

最近在做一个开机启动的service,但是发现开机后总是出现ActivityManager: Waited long enough for:****Service这样的错误输出,解决办法是在AndroidManifest.xml中添加persistant属性android:persistent="true"...

2019-10-10 09:12:38 1851

原创 git常用命令

(1)本地分支管理1.初始化本地git仓库$git init2.拉取远程代码$git clone ssh_address如果已经建立了本地分支和远程分支的管理,可以直接执行$git pull 该命令相当于git fetch + git merge获取远程最新修改并合并,但不会删除本地的基于之前base的提交,本地修改也会和最新的修改合并,但是基于以前base的修改依然存在,...

2019-06-11 14:35:41 249

原创 jni应用运行时抛出在system/lib64下找不到app使用的so库

最近在进行jni的app开发时,因为要用到第三方的so库,app安装在android8.0的平台上,且平台芯片是64位的。刚开始只是在jniLibs下创建了armeabi-v7a, 然后在gradle-properties文件中添加android.usedeprecatedNdk=true,并在build.gradle文件中添加ndk{ abiFilters 'arme...

2019-04-03 14:47:25 3464 2

原创 使用最新的okhttp出现的ClassNotFoundException: Didn't find class "kotlin.text.Charsets"

最近使用okhttp的最新的jar包3.12.1,下载地址http://square.github.io/okhttp/#download,以及最新的okio的jar包okio-2.1.0.jar时编译无错误,但程序运行时,报出了一个找不到类的错误AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find cla...

2019-01-11 17:27:19 1870

原创 android的wifi模块

2018-08-15 19:03:17 344

原创 如何解决Execution failed for task':appcompileDebugJava'

最近下载了github上面的一个demo,可能是由于该项目创建的比较早(创建于2013年,gradle版本是1.2.3),直接用AndroidStudio打开后,尝试生成apk,结果报出了Execution failed for task':appcompileDebugJava'错误,还提示电脑是否配置了Java_Home环境变量,可是检查了一下,电脑是有配置Java的环境变量的,再看了一下项目...

2018-07-23 16:24:38 8758

原创 Dialog

1.当我们只是使用Context来创建一个Dialog对象时,如果不设置当前window的flag,那么它的显示效果和AlertDialog是一样的,即背景是暗色的,而dialog的view是亮色,如果我们不想让背景变按,那么可以设置窗口的flag属性,方法如下:dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCU...

2018-04-18 21:41:27 217

原创 关于Activity的lunchMode

我们都知道Activity的启动模式有四种:standard,singleTop,singleTask和singleInstance,书上也有介绍,主要是通过Activity栈和内存地址来分析的,不过我觉得从Activity的生命周期,以及Activity前台与后台的切换来理解也不错。1.标准模式standard该模式是默认的启动模式,即xml中不配置Activity的launchMode属性,那...

2018-04-18 21:06:40 293

原创 关于Android单例模式

单例模式在android开发中使用非常频繁,我们经常会在某个类中需要获取当前的Application对象,或者是之前创建的某个Activity等,单例模式提供了方便快速的获取方法,而且避免了重复创建对象实例而引起的其他错误。单例模式通常有以下四种方式:1.饿汉模式(好奇怪的名字)public class MyClass {    private static final MyClass mInst...

2018-04-17 21:25:50 710 1

原创 Android自定义view的主要函数的调用流程

通常情况下,我们自定义一个MyView继承自View,除了必须提供关键的构造函数外,还需要重写以下函数 onAttachedTowindow(),onMeasure(),onSizeChanged(),onDraw()等。在使用自定义view的时候,在布局文件中像使用系统控件一样直接添加即可&lt;包名.模块名.MyView  /&gt;那么xml布局文件调用的是哪一个构造函数呢,通过log可以很...

2018-04-16 09:19:39 757

原创 如何将Activity的布局最大化

1.如何去掉ActionBar首先在Android项目的AndroidManifest.xml文件中application项目里又一个android:theme属性&lt;application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_n...

2018-04-02 18:25:43 297

原创 在绘制Path的时候画出的是闭合的区域而不是线条

Path在Android的绘画中使用的比较多,它主要用来记录用户绘制的路径,一般在view的onDraw()方法中,利用canvas.drawPath(mPath,mPaint)方法来实现绘制,不过画出来的效果如何,主要Paint的影响,例如默认情况下,不设置Paint的Style属性,那么就是填充的效果。Style是一个枚举类型,主要有三个值:1.FILL设置成这个属性,那就是填充了,即使画的是...

2018-04-02 16:18:03 4023 1

原创 如何合并git的多条commit

假设我们有之前提交的多个commit,分别如何:1.commit 1edc91fe24763ba4f576faba54ac7450ef71d4b82.commit d1a7cd8be1c084e4a789cebe6c7d0a3af2f71c4c3.commit 864be30b373c8904c25aa009a2fc9cf56fdfdd82此时,如果想要合并第2条和第3条,那么我们可以这样做:(1...

2018-04-02 14:51:01 309

翻译 如何在旋转屏幕后不再重建Activity

对于一般的Activity,如果不做特殊要求,那么在手机切换横竖屏后,Activity会重新运行onCreate()等流程,不过之前start的Activity仍然有效。若想让Activity不再走onCreate等流程,那么就在AndroidManifest.xml文件中给Activity添加属性android:configChanges针对sdk13以上的版本,需要额外添加screenSize...

2018-04-02 14:36:47 1213 2

原创 git abandon某条提交导致后续提交无法merge问题

Git提交代码后发现编译无法通过,后面把该条提交abandon掉,结果后续提交编译通过却无法merge,因为后面的commit是基于abandon掉的那条生成的,对于该问题1.解决编译错误的问题2.reset –hard 到abandon的前一条3.cherriy-pick后面无法合并的多条提交...

2018-03-06 16:50:49 12542 4

原创 使用AndroidStudio将矢量图导出xml文件后找不到变量的问题

使用studio将矢量图导出为xml文件,选中需要导出的.psd图片,然后右键new-&gt;Vector Asset不过该工具导出的xml文件中含有中文,导致代码中使用资源文件的时候找不到资源文件。解决办法是:例如把“形状8”改为“shape 8”...

2018-03-06 16:43:24 553

原创 在AndroidStudio项目中使用jdk8.0版本编译的jar包报出的52字节码错误

最近在服务器上面编译了自己的classes.jar,然后添加到项目之后出现了错误,说无法转换52版本的字节码,在网上搜了很多关于该问题的解决方法,主要是在app/build.gradile文件中添加几行代码jackOptions {    enabled true} compileOptions {    sourceCompatibility JavaVersion.VERSION_1_8...

2018-03-06 16:36:23 831

原创 从某个路径读取图片遇到的问题

1.使用固定的路径private  StringmFilePath = "/data/user/0/com.tpv.asc.aiapplications/files/image/";那么是可以向该路径写文件的,但是从该路径读取文件,却是空的。改为android获取路径的方法后,则可以读取mFilePath = getFilesDir().getAbsolutePath()+"/image/";虽然...

2018-03-06 11:19:45 290

原创 Android截屏

1.最简单的是使用android sdk命令,这种方法需要系统权限,可以利用系统的签名工具给apk进行签名,然后再安装。String savePath = new File(new File(Environment.getExternalStorageDirectory().getPath()),defaultFileName).getAbsolutePath();try {        Run...

2018-03-06 11:11:12 222

原创 如何引用github上面的项目

如果想使用gitbub上某个别人写的库,可以不用再添加.so和jar包,可以直接在app目录下的gradle添加依赖。

2018-03-06 11:03:08 8757

原创 反编译apk查看权限

在sdk的安装目录D:\Android\sdk\build-tools\26.0.0下有aapt.exe工具,该工具可以帮助查看apk的一些相关信息,执行如下命令,D:\Android\sdk\build-tools\26.0.0&gt;aaptdump badging C:\Users\zhenpu.zhang\Desktop\appcloud_oobe_mtc.apk即可查看apk的相关权限。...

2018-03-06 10:58:02 1714

原创 如何获取手机的屏幕尺寸

1.获取手机屏幕的尺寸(包括状态栏)的方法如下。 Point size = new Point();getWindowManager().getDefaultDisplay().getRealSize(size);int w = size.x;int h = size.y;KLog.d(TAG,"width="+ w + "height=" + h); 2.而获取不包含状态栏尺寸的方法是这样的。 ...

2018-03-06 10:55:01 2518

原创 Android framework中资源的定义

1.在向framework中添加自定义的资源文件的时候遇到了以下的问题起初只是按照github上面commit的修改向framework中添加自定义的sysmbols文件smartisanos_symbols.xml文件中找到该sysmbol变量实际上这里只是一个变量的声明,真正的定义在res\res\layout\smartisan_drag_text_popup.xml文件中。所以我们需要把该...

2018-03-06 09:37:02 391

空空如也

空空如也

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

TA关注的人

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