
android
Kawa103
这个作者很懒,什么都没留下…
展开
-
记录多权限判断
2^2+2^3+2^4 = 28次方当作类型,比如2是添加,3是修改,4是删除对应的数据转换为二进制 ,然后进行&(位运算,例如相对应位都是1,则结果为1,否则为0)原创 2022-06-10 15:16:01 · 160 阅读 · 0 评论 -
记录一个Android Studio build.gradle文件很坑的问题
点击build.gradle文件上面的代码,比如 点击JavaCompile ,无法进入源代码查看,提示 “cannot find declaration to go to” ,直接说就是找不到要转到的声明,产生的原因是gradle的版本问题,我的Android studio是4.1.3的,gradle版本也是android.libraryVariants.all { variant -> JavaCompile javaCompile = variant.javaCompileProv原创 2021-04-14 10:29:57 · 550 阅读 · 0 评论 -
Android 多线程发送消息(Future、Callable)
多线程实现方式主要有三种:继承Thread类 实现Runnable接口 使用ExecutorService、Callable、Future 第1,2两种是没有返回结果的,第3是带有返回结果处理多线程发送消息用的是第3种,其是通过实现Callable接口,并用Future可以来接收多线程的执行结果。 AtomicInteger是一个提供原子操作的Integer类,通过线程安...原创 2019-02-21 15:43:10 · 1059 阅读 · 0 评论 -
记一次自定义插件(字符串加密插件)
第一次编写插件,开始搞的有点狼狈,一直没有搞明白怎么自定义属性进去,后来看了微信AndResGuard里面的就理解了首先要做的是先定义好自己需要的属性/** * 用于build.gradle中的参数传递 */public class SettingParams { public Iterable<Integer> decryptKey /** ...原创 2019-02-12 14:58:25 · 834 阅读 · 0 评论 -
ListView 局部更新数据
firstVisiblePosition = 0lastVisiblePosition = 4position = 9mChildren这个方法里面的item都是可见的item控件, 如果直接用position在getChildAt这个方法里面获取到的View不是对应的View, ListView显示出来的View都是重新从0开始排索引, 真实的索引是需要计算...原创 2019-02-18 18:26:19 · 1110 阅读 · 0 评论 -
Win10下用AndroidStudio直接使用Ollvm
编译过程看这里:https://blog.youkuaiyun.com/u014476720/article/details/103662800使用过程:1.去ndk目录替换文件F:\androidsdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin替换这三个就行clang++.execlang.execl...原创 2019-12-23 17:38:40 · 3520 阅读 · 8 评论 -
Android Studio编译动态替换清单文件AndroidManifest.xml内容(找不到AndroidManifest路径问题解决)
applicationVariants.all { variant -> //参数配置 variant.outputs[0].processManifest.doLast { def manifestFile = "${manifestOutputDirectory}/AndroidManifest.xml" ...原创 2019-03-04 17:28:40 · 6196 阅读 · 2 评论 -
微信AndResGuard资源混淆知识点巩固
git: https://github.com/shwenzhang/AndResGuard本来想自己研究资源混淆的工具的,开始看到美团的方案说修改aapt可以达到目的,可是问题来了,搞了很久aapt的源码始终没有编译出来,后来就用微信的开源工具(AndResGuard)了。AndResGuard的原理是 解压apk包->修改resources.arsc文件内容->重新命名资源...原创 2019-01-09 14:42:34 · 686 阅读 · 0 评论 -
记一次使用OLLVM增加so文件的分析难度(2)——解决arm64-v8a编译出错
上一篇我用的是android-ndk-r10d的ndk,编译arm64-v8a是有问题的,解决了下面那个“错误提示1”的问题之后,还会有个一个新问题的,问题如下:/opt/android-ndk-r10d/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/lib/gcc/aarch64-linux-android/4.9/.....原创 2018-12-25 17:08:07 · 1845 阅读 · 0 评论 -
使用RxJava和Glide保存图片
RxJava的基本框架Observable.create(new ObservableOnSubscribe<Boolean>() { @Override public void subscribe(ObservableEmitter<Boolean> e) throws Exception { //TODO 处理下载图片的操作 ...原创 2018-12-05 16:34:07 · 1428 阅读 · 1 评论 -
解决图片自适应高度的问题
自适应的加载方法 public static void loadImgBySize(Context context, ImageView imageView, String imgUrl, int w, int h) { Glide.with(context).load(imgUrl).override(w, h).placeholder(R.mipmap.placehold...原创 2018-12-05 17:39:51 · 2833 阅读 · 0 评论 -
Android自定义Scrollview
效果:主要的几个知识点有 Scroller 、VelocityTracker主要操作View里面的几个方法有 onMeasure、onTouchEvent 、computeScroll 、scrollTo() 、scrollBy() Scroller 是一个专门用于处理滚动效果的工具类,直接调用ScrollTo()或者ScrollBy()的方式来移动的话是瞬间完成,用户体...原创 2018-12-07 17:22:36 · 1291 阅读 · 0 评论 -
Android Studio自定义proguard混淆
方法一:(失败)开始的时候感觉有点懵逼,百度上一大堆说去安装目录替换proguard的版本(前提是你下载源码重新编译一个修改好的jar包)那么问题来了,我压根就不知道studio引用的是那个版本的,人家说也不一定引用最新的,网上查了很久我也没得出答案,我的Android studio是3.2版本的,后来我三个版本都替换修改的包,搞着搞着,还是果断放弃吧 Android st...原创 2018-12-27 15:20:02 · 1751 阅读 · 1 评论 -
JNI 获取系统类加载器处理反制Xposed框架
在网上找了很久没有找到 jni 相应的代码,基本都是java的下面是全部代码:/** * 检测xposed * checkXposed */bool checkXposed(JNIEnv *env) { //找到ClassLoader类 jclass classloaderClass = env->FindClass("java/lang/ClassLoa...原创 2018-12-11 17:17:03 · 1655 阅读 · 1 评论 -
简单异或加密处理
异或的理解: 将十进制转换成二进制进行异或,相同的为0 ,不相同的为1,可以看下图理解,异或之后得出的二进制再转十进制,之后的就是异或后的值断点查看过程:异或前:异或后:Java版代码: private static byte[] keyBytes = {1,5,3,4,5}; public static String xor_go(String en...原创 2018-12-17 11:12:07 · 3510 阅读 · 0 评论 -
EventBus3.0性能优化问题
引入 api 'org.greenrobot:eventbus:3.1.1' annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'生成索引文件 defaultConfig { javaCompileOptions { annotatio...原创 2019-03-26 14:54:21 · 1208 阅读 · 0 评论 -
Android7.0相机兼容处理方法
由于之前没有用过7.0的系统,所有一直不知道居然还有这么一个兼容问题,我这里用的是严苛模式处理兼容,一下是处理代码:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); Stric原创 2017-11-20 14:55:51 · 708 阅读 · 0 评论 -
记录Gradle编译混淆导致反射找不到方法出错问题
1.通配符*,匹配任意长度字符,但不含包名分隔符(.)2.通配符**,匹配任意长度字符,并且包含包名分隔符(.)3.通配符***,匹配任意参数类型#不混淆指定的类-keep public class com.kawa.easyconvey.utils.Md5Utils { *; }#不混淆指定的包路径-keep public class com.kawa.easyconvey.utils.** ...原创 2018-07-12 14:44:22 · 1505 阅读 · 0 评论 -
因Android版本问题的融云mLibHandler为空的坑爹问题
好郁闷,这个问题以前就遇到过了,最近重新搭建了一套框架的时候引入融云的sdk时,居然忘记这个问题了,搞到我找了好久才搞定,融云那边的提示是“[ RongIMClient ] [connect] mLibHandler is null, connect waiting for bind service”直接说就是调取不了融云SDK的so包,很尴尬,之前在6.0上都是这么写的都没有问题,现在在8.0上...原创 2018-07-06 09:51:48 · 728 阅读 · 0 评论 -
Android利用jetty搭建微型服务器
主要的引入包:implementation 'org.eclipse.jetty:jetty-webapp:7.6.0.RC4'implementation 'org.eclipse.jetty:jetty-deploy:7.6.0.RC4'implementation 'org.eclipse.jetty:jetty-server:7.6.0.RC4'implementation 'org...原创 2018-07-12 17:20:24 · 3604 阅读 · 1 评论 -
设置listview随item的增加而向上滚动
listview随item的增加而向上滚动。mList.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);横向拉伸属性:android:fillViewport="true"原创 2018-07-24 18:29:56 · 755 阅读 · 0 评论 -
实现跨进程间的Ui添加更新和显示
AIDL的定义aidl是Android interface definition Language 的英文缩写,意思Android 接口定义语言。 使用aidl可以帮助我们发布以及调用远程服务,实现跨进程通信。 将服务的aidl放到对应的src目录,工程的gen目录会生成相应的接口类 RemoteViews执行流程:RemoteViews通过Binder传递至System...原创 2018-08-10 16:58:38 · 505 阅读 · 0 评论 -
Android libjpeg图片压缩模块
首先去这个地址下载:https://github.com/bither/bither-android-lib解压获取这个libjpeg-turbo文件的文件,里面只留jni文件夹,其他全部删除,之后进行编译libjpeg.so包,编译的时候先要进入到jni文件夹里面,执行下面命令命令:ndk-build APP_ABI=armeabi-v7a,armeabi 编译成功之后会在j...原创 2018-07-16 15:26:34 · 632 阅读 · 1 评论 -
Android 字母侧栏索引菜单
最近在做选择城市的列表,需要用到那个字母索引的,觉得这个东西不难就想偷偷懒百度算了,后来找了好几个都感觉写的太复杂了,想想还行自己写一个简单一点的算了,于是就有了下面的字母侧栏索引菜单控件了。我写的这个很简单,基本都是LinearLayout和TextView,反正就是简单的不能再简单了有两部分,一个是侧栏控件SidebarView,一个是侧栏子控件SidebarItemView效果图:SideB...原创 2018-06-27 17:53:22 · 2103 阅读 · 0 评论 -
Android获取h5代码
本文只是提取了一些派派自动答题工具的部分代码进行说明。原理只是原生和js的交换而已,下面就说说我的思路吧。刚开始玩派派的时候,是一个朋友分享了一个二维码给我,通过访问二维码进入答题界面,进去随便答题一下都有几分钱,后来无意中发现这个链接只要刷新就可以重新开始,每次都这样,每次都有几分钱,后来登录上app看,钱是存在的,然后才有了这个自动点击工具。不过后来玩了三天,发现虽然提示有几分钱,但是app上原创 2017-11-27 14:19:17 · 1380 阅读 · 0 评论 -
Android Studio获取SHA1
1.看看Android studio两边,找到Gradle 点击进去,然后找到随便项目下面的Tasks->android->signingReport 点击执行,等一会然后就可以获取到SHA1, 如果没有看到下图的内容,请点击下图的左上角的图标,然后就会有的原创 2017-12-28 17:56:11 · 335 阅读 · 0 评论 -
javah用法
第一种用法:前提是已经在这个路径F:\demo\FFmpegDemo\app\build\intermediates\classes\debug javah -d F:\demo\FFmpegDemo\app\src\main\java -jni com.kawa.ffmpeg.utils.FFmpegUtils原创 2018-05-30 14:43:50 · 3790 阅读 · 0 评论 -
极光JPush推送模块封装使用
引入工具包jpushlib之后1.在app项目里面的build.gradle 添加以下配置,下面代码是替换AndroidManifest.xml的currentPackageName字符串为当前包名 android.applicationVariants.all { variant -> variant.outputs[0].processManif...原创 2018-05-30 17:33:19 · 1557 阅读 · 0 评论 -
使用面向切面Aspectj处理权限及处理按钮点击过快
首先在你的项目里面引用aspectjlib模块配置如下:1.在项目最外层的build.gradle 引入dependencies { classpath 'org.aspectj:aspectjtools:1.8.9' classpath 'org.aspectj:aspectjweaver:1.8.9'}2.在app里面的build.gradle 添加一下代码a...原创 2018-05-31 10:48:22 · 428 阅读 · 0 评论 -
记一次TabLayout的用法
问题1:最近在Android8.0上面遇到一个奇葩的事情,就是在布局文件里面设置TabLayout的item,不知为啥,运行起来的时候字体颜色没有显示,以下是没有显示的写法: <android.support.design.widget.TabLayout android:id="@+id/fragment_transaction_tab" androi...原创 2018-06-08 10:15:10 · 330 阅读 · 0 评论 -
记第一次使用Xposed的感受
以前听到Xposed的时候,完全不知道是啥,后来听说这个东西很叼可以获取各种app的数据,我的天啊,真的很厉害的酱紫,于是就去下载来看看。不过使用这个Xposed是要root手机的,说到这先说个题外话,我的手机是华为的,半个月前就想root了,坑货的大华为,居然要登录账号15天才能解锁,苦逼的我为有等到今天才搞了,后来解锁了就高高兴兴的准备一键root了……苦逼,各大厂获取root的app都试过,...原创 2018-06-22 17:53:34 · 1456 阅读 · 0 评论 -
Android安全防护(2)-动态注册JNI方法
动态注册jni方法的好处就是增加逆向的分析难度两个对比较就会很容易发现没有加密的很容易就会知道那个方法是干啥的箭头1是根据javah自动生成的方法名箭头2是自定义方法名的,上面是加密过后的方法名 用动态注册的方式最主要的是建立一个映射表 //映射方法表static JNINativeMethod methods[] = { {"test...原创 2018-06-19 13:16:44 · 341 阅读 · 0 评论 -
避免过度绘制的解决方法
检测过度绘制:进入设置 -> 开发者选项 -> 调试GPU过度绘制 -> 显示GPU过度绘制提示色值:真实对比: 蓝色,淡绿,淡红,深红代表了4种不同程度的Overdraw情况,蓝色: 意味着overdraw 1倍。像素绘制了两次。大片的蓝色还是可以接受的(若整个窗口是蓝色的,可以摆脱一层)。 绿色: 意味着overdraw 2倍。像素绘制了三次。中等大小的绿色...原创 2018-08-07 16:48:45 · 419 阅读 · 0 评论 -
ViewPager真正做到自适应高度
ViewPager控件,我以前的做法都是直接写死高度,这个对于做广告滚动图的还可以,因为高度都是16:9,写死也没关系。但是对于显示那些动态数据列表,这明显已经不满足需求了。其他大部分控件的的自适应都是用这个wrap_content属性就可以搞定,但是对于ViewPager来说没有效果,不设置高度就不显示处理,我想到的解决办法就是重写onMeasure方法。原理是:获取子控件的高度用于重新...原创 2018-08-03 10:17:00 · 9128 阅读 · 13 评论 -
导航栏随滑动透明变化及悬浮重点讲述
效果显示:随着滑动设置顶部标题栏透明,主要是在滑动监听里面做操作: mScrollView.setListener(new CompatibleScrollView.ScrollViewListener() { @Override public void onScrollChanged(View v, int x, int y, int...原创 2018-08-08 15:01:51 · 739 阅读 · 0 评论 -
List删除数据的一个问题记录
使用List.remove删除数据时发现失效我传入的类型是Integer,发现点击进入查看到的类型是Object 后来百度一番说是级别问题 int < Integer < Object之后改成了传入int , 发现点击进去时类型很精准使用int 类型进行remove 正常可以删除...原创 2018-11-14 17:03:05 · 489 阅读 · 0 评论 -
RxJave的使用
implementation 'io.reactivex.rxjava2:rxjava:2.0.4' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'1.定时器 //start:起始数值 //count:发射数量 //initialDelay:延迟执行时间 ...原创 2018-11-21 15:50:30 · 227 阅读 · 1 评论 -
元符号的视觉差小细节
正确的: ¥习惯性的:¥不要看上面都是一模一样的的元符合,其实复制到代码上就看到很明显的效果了正确的:复制这个的,我用过的手机里面都是显示两横的习惯性的:负责这个的,经测试有部分手机显示两横(小米),有部分手机就显示一横(华为)...原创 2018-11-22 11:04:26 · 159 阅读 · 0 评论 -
基本混淆的配置
“类”代表类相关的限定条件,它将最终定位到某些符合该限定条件的类。它的内容可以使用:具体的类 访问修饰符(public、protected、private) 通配符*,匹配任意长度字符,但不含包名分隔符(.) 通配符**,匹配任意长度字符,并且包含包名分隔符(.) extends,即可以指定类的基类 implement,匹配实现了某接口的类 $,内部类 “成员”代表类成员相关...原创 2018-11-29 15:26:00 · 743 阅读 · 0 评论 -
记录一个融云音视频比较坑的问题
看知识库里面的工单,融云的人说用RongCallClient.getInstance().getCallSession()上面这个可以判断是否通话中,嗯,先当他说的是正确的后来发现,只是判断null 不 null 这样的并不严谨,有时候很快的挂断通话或者对方没有接通直接挂断通话,RongCallClient.getInstance().getCallSession()这个是不为空的,...原创 2018-12-04 14:49:06 · 7810 阅读 · 0 评论