自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android bp构建引入其他模块头文件

最近做项目过程中经常遇到Android.bp文件引入其他模块的头文件库,总是记不住bp的写法,这里做个记录。不由想起来老师的名句:好记忆不如烂笔头。2.其他的模块应用引入头文件库。

2024-03-11 11:20:37 386

原创 system trace

android system trace

2023-09-27 15:33:16 155

原创 LINUX 静态库和动态库的制作

LINUX 库的制作

2023-07-27 21:31:32 14 1

原创 AndroidStudio 如何引入第三方so库【最新亲测可行】

在做Android JNI 或者NDK混合开发调试的时候,用AndroidStudio 的效率明显要高于在Android 源码中用Android.mk的编译so,push到机器 上测试。源码增量编译时间和来回替换时间效率太低了,尤其是碰到服务器很卡的时候,简直要命。而且在AndroidStudio中开发c/c++的提示功能明显要好于在vs code中的提示情况。AndroidStudio时如此的丝滑和流程,所以我就把这种c/c++ 混合java 的开发调试全部挪到本地。CSDN 上流传最多的一篇链接

2021-12-23 22:04:27 5847 4

原创 Makefile 怎么写

比如当前目录下有几个c 文件,怎么用makefile 去编译这几个文件。第一个版本:

2021-12-12 19:31:15 540

原创 c++ 简单实现双向链表

头文件定义:#pragma once#include <stdlib.h>#include <stdio.h>#include <functional>using namespace std;//定义链表节点 typedef struct CIRCLE_NODE{ CIRCLE_NODE * next;}Node;//定义链表 typedef struct CIRCLE_LINK_LIST { Node header; int size;

2021-09-17 20:55:38 306

原创 C++ 仿函数绑定适配器<functional>

#include <vector>#include <functional>#include <algorithm>using namespace std;//绑定函数 的参数列表是指,参数列表+返回值struct PrintInfo2 :public binary_function<int,int,void> { //编译报错 具有类型“const _Fn”的表达式会丢失一些 const-volatile 限定符以调用“void...

2021-08-29 20:52:34 139

原创 Android.bp 拷贝权限xml文件到

以前在做AndroidFramework的时候,有经常做系统动态jar 包,其中有一8.0项工作是拷贝权限的<?xml version="1.0" encoding="utf-8"?><permissions> <library name="localconfigjni.xml" file="/system/framework/LocalConfigJNI.jar"/></permissions>permissio

2021-08-19 22:31:17 1591 2

原创 函数指针的三种 定义和使用方式

#include <iostream>using namespace std;//函数 指针的使用int add(int a,int b) { cout << " add fuction called " << endl; return a + b;}int main(){ //1.定义函数类型 -- 返回值(类型名字)(参数列表)--这种格式 typedef int (FUNCTION)(int, int); //使用规则如下,先初.

2021-08-19 21:43:53 338

原创 Failed to transform file '**.jar' to match attributes {artifactType=android-classes} using transform

最近接手别人项目用androidStudio 3.0.0编译时发现错误如下:Could not resolve all files for configuration ':view-busipresenter:debugAndroidTestRuntimeClasspath'.&gt; Failed to transform file 'appbase.jar' to match attrib...

2018-11-15 17:35:02 16832 2

原创 关于360插件化框架Replugin竖屏修改为横屏解决方案

预备工作去GitHub搜索replugin工程,下载replugin源码,解压如下,光标选中的部分是我们要修改的地方。1.1.20 为什么要修改Gradle因为Replugin原生的默认生成activity坑位都是竖屏的,而车机是横屏的,导致插件activity 实际效果与预期不相符,另外,在插件manifest中的activity标记横屏是无效的。1.1.21Gradle插件分类介绍...

2018-11-01 13:50:37 1973 7

原创 JNI之c/c++返回中文给java 乱码问题以及java数组在c排序

c/c++返回中文给java时会乱码,因为java和c/c++的编码格式不一样,java的utf-16,c/c++是utf-8,所以在返回中文字符的时候,包装成gb2312返回。 具体见如下博客链接: jni交互中文乱问题分析public class CodeTest { public native String getChineseFromNative(); public sta

2017-12-24 13:39:23 863

原创 JNI之 c/c++调用java构造函数

有时候c/c++是面向过程编码,很多有用工具类都没有,要编码人员自己实现,如果可以调用java大量存在的类岂不是更省事更简洁。 下面是通过调用java的Date类产生是时间戳。public class JniConsTest { //c访问java构造函数,并返回对象 public native Date getCurrentTime(); public static voi

2017-12-23 16:15:02 3443

原创 JNI 之c/c++和Java交互,调用java成员

public class JniTest2 { //c访问非静态成员 public String testField="hello..."; //c修改java静态成员 public static int time=78; //c访问java 方法 public native void invokeJavaMethod(); //c修改java

2017-12-23 14:15:56 742

原创 JNI 之Java和c/c++交互,提升Java变成效率

JNI 主要是java和c++相互调用,java可以把效率低,耗时操作比较严重的逻辑放在c++里面。可以大大提升效率和节省资源。 下面是java调用的windows下的 c++的dll动态库,还有一种是标准c的linux的so动态库。工程结构图如下:第一步:编写Java代码:public class JniTest { public native static String getStr

2017-12-20 22:59:34 3555

原创 Linux 上标准c复制文件

#include "stdafx.h"#include<stdio.h>#include<stdlib.h>int _tmain(int argc, _TCHAR* argv[]){ char *path = "C:\\Users\\Administrator\\Desktop\\original.PNG"; char *newpath = "C:\\Users\\Admin

2017-12-19 20:30:24 449

原创 动态分配结构体内存

struct Teacher{ char name[20];};//嵌套结构体struct Student{ int age; struct Teacher teacher;//内存大小,指针也是int类型}; //动态分配结构体内存 struct Student *p1 = (Student* )malloc(sizeof(struct Student)*

2017-12-16 23:31:19 7683 1

原创 Java设计模式之解释器模式

public class Client { public static void main(String[] args) { // TODO Auto-generated method stub String regex="2 * 10 / 5 * 3 "; Calculator calculator=new Calculator();

2017-12-14 23:09:30 257

原创 Java设计模式之观察者模式

//demo 演示public static void main(String[] args) { // 新建观察者 ConcreteObserver obsever1=new ConcreteObserver(); // 新建被观察者 ConcreteSubject concreteSubject=new ConcreteSubje

2017-12-13 21:33:08 185

原创 Java设计模式之责任链模式

上面是的大致的模型图。 message从第一个链开始判断和处理,如果不能处理就传给下一个链,每一个链用handler表示。所有的链继承自同一个父类,Handler,代码如下://责任链的基类public abstract class Handler { protected Handler nextHandler; void handle(BaseMessage msg) {

2017-12-07 21:20:29 871

原创 Java建造者模式原型和链式变种

建造者最开始有4个角色 1.用户client,提出造房子 Room的需求 2.设计者,Designer,出图纸,指挥包工头干,持有包工头 3.包工头, interface Build,拥有步骤和返回房子Room 4.Room,最终的产品 代码从client开始public class Client { //client 客户提出需求,造房子,并得到房子 //不关心过程和建

2017-12-05 22:46:58 1292

原创 Java模板模式之浅拷贝

public class Client { //从调用者代码进入 public static void main(String[] args) { SmallProduct product=new SmallProduct(); product.setProductNumber(330); product.setProductName("

2017-12-04 23:12:59 210

原创 Java工厂模式之抽象工厂

抽象工厂模式有很重要的两点,java的多态,和java的面向接口编程。 先看类图之间的关系 1.工厂类的关系如下: 2.产品两个类的类图关系 3.调用者public static void main(String[] args) { //调用者调用 BmwFactory bmwFactory=new BmwFactory(); bmwFacto

2017-12-04 20:13:36 182

原创 Java工厂模式之简单工厂模式

首先定义三个类集成基类, 每个子类都重写了父类的实现方法。 //这个在android源码中非常常见,比如图片资源分为好几种 public static void main(String[] args) { //一般情况先new 然后调用,代码量多 Teacher teacher = new Teacher(); teacher.belongMet

2017-12-03 15:05:23 315

原创 Java单利模式之饱汉模式浅谈

public class SingleInstance {public SingleInstance() {}//饱汉模式之线程安全和效率讨论/** * 效率低,每次进来都要同步,尽管实例不为空了 * @return */public static synchronized SingleInstance getInstance() { if (instance == null)

2017-12-02 21:47:52 404

原创 android原生热修复流程和原理分析实现

首先apk就是一个压缩文件,解压apk文件的内容如下图: 安卓原生热修复主要原理图和流程图如下,我花了好长时间才绘好,中间改了好几次,应该来说是很直观明白的,其中有截取了BaseDexClassLoader的关键源码,还有DexPathList的源码 a.现将打包好的dex文件传入手机中。 b.开始撸代码(主界面) public void onClick(View view) {

2017-11-19 00:10:56 508

原创 获取assets目录下文件的路径

关于这个问题网上很多回答都是转自下面的内容 第二种方法看代码就知道不靠谱,第一种方法感觉在后面就是不适用了。 下面是我自己做的路径获取代码:File image = getFileStreamPath("image.jpg"); File second = getFileStreamPath("second.jpg"); Log.i(TAG, "onCreate:

2017-11-15 20:19:02 40092 19

原创 Xfermode改变按钮背景或者drawable的状态颜色

按钮图标颜色随着点击改变颜色,如果用selector就会增大内存,特别是按钮背景颜色不是春色的时候,就要用到两张drawable资源。1.如果用view的api设置forceground呢?,先见这个api的前后效果 int color=ContextCompat.getColor(MainActivity.this,R.color.translunent); C

2017-11-13 19:22:08 524

原创 toolbar和标题和menu汇总

第一个问题:toolbar的标题栏居中问题,这里使用的是textview作为标题栏,因为这样很好控制,有的比如标题栏中是个小加载进度条,如果用toolbar的titile就不好控制了,下面是布局代码 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" app:navigationIcon="

2017-11-02 21:51:04 682

原创 Java删除数组指定元素,并压缩数组

定义原数组和接收结果的数组 int[] array1 = new int[]{1, 8, 6, 5, 7, 12, 31, 89, 100}; int[] result; printArray(array1); result = resetArray(array1, 31); printArray(result); //下面是具体实现方法 private int[

2017-11-02 18:06:17 1366

原创 更改状态栏里面图标字体颜色

上面点击不同fragment,显示状态栏字体的不同颜色,比如“中国移动”,显示颜色不一样 亲测:在android 7.0以及以上实现起来很容易,7.0以下难以实现。 7.0以下难以实现,因为很多手机厂商都对状态栏主题重写了,除非他们公开代码,不然难以实现。为了不至于太难看,低于7.0版本的就用半透明状态栏,这样看起来不太过于突兀。//4.4系统是直接生成一个view和状态栏宽高相等,覆盖在状

2017-09-29 10:00:48 1902 1

原创 自定义控件InfoTextView展示个人信息

像上面展示信息的控件,如果用传统的textview肯定是不够的,一般人都是用布局和控件去叠加,这样效率不高,而且代码量多。/** * 如果用一般控件去堆砌看起来很麻烦 * 自定义infoTextView, * Created by Administrator on 2017-9-1. */public class InfoTextView extends TextView { pu

2017-09-08 17:10:57 819

原创 c/c++字符串拼接追加复制,字符串和int相互转换,sscanf的转义

char s[100]="hello world"; //1.计算字符串的长度 int lenth= strlen(s); printf("length=%d\n",lenth); //2.字符串的拼接或追加 char s2[100]="abcefg"; strcat(s,s2);//将s2拼接到s后面字符串的指定长度拼接 char s[100]

2017-09-06 21:41:40 10585

原创 c/c++真伪随机数

伪随机数的产生#include <stdio.h>#include <stdlib.h>int main(void){ //c++的随机数使用 int i=0; for(i=0;i<11;i++) { int value=rand(); printf("%d\n",value); } return 0;}//每

2017-09-05 22:42:12 3805 1

原创 c/c++字符串的逆序,混合长度,祛除空格等处理

—–字符串的逆序—–int main(void){ //字符串的逆序 char string[100]="hello wrold"; //先计算字符串的长度 int lenth=0; while(string[lenth++]); lenth--;//减去最后一次的自增 printf("%d\n",lenth); int min=0;

2017-09-04 22:16:47 603

原创 MVP的实现,后续更新mvp和databinding结合

上图是界面和运行效果,mvp的结构图如下: presenter类主要处理业务逻辑,view通过接口来和presenter交互减少耦合度,mode主要是存储数据和提供数据。—–presenter—– presenter代码/** * 业务逻辑顶层父类 * Created by Administrator on 2017/9/2. */ public class BasePresenter {

2017-09-03 10:46:11 475

原创 Loader之自定义AsyncTaskLoader<D>

Loader是android5.1新增加的api,兼容到android3.0系统。有两个子类CursorLoader和AsyncTaskLoader,CursorLoader主要是用访问系统Uri和数据库等,AsyncTaskLoader也可以完成cursorLoader的工作,异步loader一般自定义用来加载网络数据。Loader有个最重要的特点就是能默认的缓存数据,已经加载过的不会重新加载,当

2017-07-30 14:29:07 387

原创 DataBinding事件绑定【二】

DataBinding事件绑定有两种方式 Method References(方法引用)和Listener Bindings(事件监听) 就先view设置点击事件也有两种方式view.setOnClickListener(View view)以及在XML中定义android:onClick=”“。 简单运行了textview和button的点击效果如下: //XML代码如下<?xml ve

2017-07-29 21:02:45 2221 1

原创 DataBinding祛除findviewbyid和数据绑定【一】

一。使用限制条件: 【1】最低兼容到android 2.1 (API level 7+). 【2】Gradle至少是1.5以上 二。databinding主要是用来提高开发效率,初步使用特点是祛除了大量的findviewbyid。完全隔离view和业务逻辑 三。怎么使用,首先在 module的gradle文件中配置如下代码 dataBinding{ enabled=true

2017-07-29 15:17:15 893

原创 RecyclerView的divider的问题

recyclerview的divider的和listview不一样,也有官方的提供的API进行设置divider,代码如下: LinearLayoutManager manager = new LinearLayoutManager(this); view.setLayoutManager(manager); DividerItemDecoration divider

2017-07-26 15:34:41 1604

recyclerview的item拖动排序

recyclerview的item拖动排序,item里面控件触摸进行拖动排序

2017-04-09

自定义Dialog仿IOS底部弹出

附件是小Demo,仿ios底部弹出的dialog

2016-12-30

空空如也

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

TA关注的人

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