- 博客(74)
- 资源 (2)
- 收藏
- 关注
原创 Android bp构建引入其他模块头文件
最近做项目过程中经常遇到Android.bp文件引入其他模块的头文件库,总是记不住bp的写法,这里做个记录。不由想起来老师的名句:好记忆不如烂笔头。2.其他的模块应用引入头文件库。
2024-03-11 11:20:37
1152
原创 AndroidStudio 如何引入第三方so库【最新亲测可行】
在做Android JNI 或者NDK混合开发调试的时候,用AndroidStudio 的效率明显要高于在Android 源码中用Android.mk的编译so,push到机器 上测试。源码增量编译时间和来回替换时间效率太低了,尤其是碰到服务器很卡的时候,简直要命。而且在AndroidStudio中开发c/c++的提示功能明显要好于在vs code中的提示情况。AndroidStudio时如此的丝滑和流程,所以我就把这种c/c++ 混合java 的开发调试全部挪到本地。优快云 上流传最多的一篇链接
2021-12-23 22:04:27
10138
5
原创 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
341
原创 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
179
原创 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
2064
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
383
原创 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'.> Failed to transform file 'appbase.jar' to match attrib...
2018-11-15 17:35:02
17437
2
原创 关于360插件化框架Replugin竖屏修改为横屏解决方案
预备工作去GitHub搜索replugin工程,下载replugin源码,解压如下,光标选中的部分是我们要修改的地方。1.1.20 为什么要修改Gradle因为Replugin原生的默认生成activity坑位都是竖屏的,而车机是横屏的,导致插件activity 实际效果与预期不相符,另外,在插件manifest中的activity标记横屏是无效的。1.1.21Gradle插件分类介绍...
2018-11-01 13:50:37
2089
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
934
原创 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
3541
原创 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
802
原创 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
3668
原创 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
502
原创 动态分配结构体内存
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
7855
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
288
原创 Java设计模式之观察者模式
//demo 演示public static void main(String[] args) { // 新建观察者 ConcreteObserver obsever1=new ConcreteObserver(); // 新建被观察者 ConcreteSubject concreteSubject=new ConcreteSubje
2017-12-13 21:33:08
217
原创 Java设计模式之责任链模式
上面是的大致的模型图。 message从第一个链开始判断和处理,如果不能处理就传给下一个链,每一个链用handler表示。所有的链继承自同一个父类,Handler,代码如下://责任链的基类public abstract class Handler { protected Handler nextHandler; void handle(BaseMessage msg) {
2017-12-07 21:20:29
1027
原创 Java建造者模式原型和链式变种
建造者最开始有4个角色 1.用户client,提出造房子 Room的需求 2.设计者,Designer,出图纸,指挥包工头干,持有包工头 3.包工头, interface Build,拥有步骤和返回房子Room 4.Room,最终的产品 代码从client开始public class Client { //client 客户提出需求,造房子,并得到房子 //不关心过程和建
2017-12-05 22:46:58
1353
原创 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
240
原创 Java工厂模式之抽象工厂
抽象工厂模式有很重要的两点,java的多态,和java的面向接口编程。 先看类图之间的关系 1.工厂类的关系如下: 2.产品两个类的类图关系 3.调用者public static void main(String[] args) { //调用者调用 BmwFactory bmwFactory=new BmwFactory(); bmwFacto
2017-12-04 20:13:36
228
原创 Java工厂模式之简单工厂模式
首先定义三个类集成基类, 每个子类都重写了父类的实现方法。 //这个在android源码中非常常见,比如图片资源分为好几种 public static void main(String[] args) { //一般情况先new 然后调用,代码量多 Teacher teacher = new Teacher(); teacher.belongMet
2017-12-03 15:05:23
347
原创 Java单利模式之饱汉模式浅谈
public class SingleInstance {public SingleInstance() {}//饱汉模式之线程安全和效率讨论/** * 效率低,每次进来都要同步,尽管实例不为空了 * @return */public static synchronized SingleInstance getInstance() { if (instance == null)
2017-12-02 21:47:52
435
原创 android原生热修复流程和原理分析实现
首先apk就是一个压缩文件,解压apk文件的内容如下图: 安卓原生热修复主要原理图和流程图如下,我花了好长时间才绘好,中间改了好几次,应该来说是很直观明白的,其中有截取了BaseDexClassLoader的关键源码,还有DexPathList的源码 a.现将打包好的dex文件传入手机中。 b.开始撸代码(主界面) public void onClick(View view) {
2017-11-19 00:10:56
563
原创 获取assets目录下文件的路径
关于这个问题网上很多回答都是转自下面的内容 第二种方法看代码就知道不靠谱,第一种方法感觉在后面就是不适用了。 下面是我自己做的路径获取代码:File image = getFileStreamPath("image.jpg"); File second = getFileStreamPath("second.jpg"); Log.i(TAG, "onCreate:
2017-11-15 20:19:02
40267
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
578
原创 toolbar和标题和menu汇总
第一个问题:toolbar的标题栏居中问题,这里使用的是textview作为标题栏,因为这样很好控制,有的比如标题栏中是个小加载进度条,如果用toolbar的titile就不好控制了,下面是布局代码 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" app:navigationIcon="
2017-11-02 21:51:04
738
原创 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
1480
原创 更改状态栏里面图标字体颜色
上面点击不同fragment,显示状态栏字体的不同颜色,比如“中国移动”,显示颜色不一样 亲测:在android 7.0以及以上实现起来很容易,7.0以下难以实现。 7.0以下难以实现,因为很多手机厂商都对状态栏主题重写了,除非他们公开代码,不然难以实现。为了不至于太难看,低于7.0版本的就用半透明状态栏,这样看起来不太过于突兀。//4.4系统是直接生成一个view和状态栏宽高相等,覆盖在状
2017-09-29 10:00:48
2017
原创 自定义控件InfoTextView展示个人信息
像上面展示信息的控件,如果用传统的textview肯定是不够的,一般人都是用布局和控件去叠加,这样效率不高,而且代码量多。/** * 如果用一般控件去堆砌看起来很麻烦 * 自定义infoTextView, * Created by Administrator on 2017-9-1. */public class InfoTextView extends TextView { pu
2017-09-08 17:10:57
857
原创 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
10687
原创 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
3917
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
640
原创 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
518
原创 Loader之自定义AsyncTaskLoader<D>
Loader是android5.1新增加的api,兼容到android3.0系统。有两个子类CursorLoader和AsyncTaskLoader,CursorLoader主要是用访问系统Uri和数据库等,AsyncTaskLoader也可以完成cursorLoader的工作,异步loader一般自定义用来加载网络数据。Loader有个最重要的特点就是能默认的缓存数据,已经加载过的不会重新加载,当
2017-07-30 14:29:07
422
原创 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
2302
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
953
原创 RecyclerView的divider的问题
recyclerview的divider的和listview不一样,也有官方的提供的API进行设置divider,代码如下: LinearLayoutManager manager = new LinearLayoutManager(this); view.setLayoutManager(manager); DividerItemDecoration divider
2017-07-26 15:34:41
1668
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人