imx8+android8.1开启adb remount过程

 分类:Android, Java, Uncategorized 阅读 (2,117)  imx8+android8.1开启adb remount过程已关闭评论
11月 262019
 

博文背景:imx 8qxp主板,android8.1系统,系统编译模式userDebug模式

一、开启成功的步骤

  1. 打开系统的开发者选项,并在开发者选项中将OEM unlocking设为开启状态
  2. 连接adb并执行adb root
  3. 执行adb disable-verity
  4. 执行adb reboot bootloader
  5. 连接otg线
  6. 系统重启后会停在bootloader处,在电脑上执行fastboot oem unlocking,(在Ubuntu中需要另外开一个窗口执行这个命令,否则一直提示< waiting for any device >)然后等待提示成功后重启车机
  7.  

  8. 重启成功后,再执行adb root和adb remount即可

 

 Posted by on 2019-11-26

如何让android系统编译时显示更详细的log

 分类:Android, Java 阅读 (3,141)  如何让android系统编译时显示更详细的log已关闭评论
11月 212019
 

本文基于android8.1系统编译

正常情况下,编译时很多信息都被隐藏掉了,比如如下这种

有多条内容的都被折叠到一行显示了,我们就看不到详细的信息了

加入我们加入一个tee 管道输出,命令如下:

make|tee detailed_log.txt

再执行时原来被折叠的行都可以显示出来了。

 Posted by on 2019-11-21

communication to xxx.com not permitted by network security policy错误的原因

 分类:Android, Java 阅读 (2,333)  communication to xxx.com not permitted by network security policy错误的原因已关闭评论
11月 182019
 

这是因为Android P(9.0)限制了http的明文请求的原因,具体分析见下面转发的文章

转发:

在Android P(9.0) 系统中,限制了明文流量的网络请求,因为安卓新版本默认是不允许使用明文网络传输的,会强制让应用都使用https,非加密的流量请求都会被系统禁止掉。

Google表示,为保证用户数据和设备的安全,针对下一代Android系统(Android P) 的应用程序,将要默认使用加密连接,这意味着Android P将禁止APP使用所有未加密的连接,因此运行Android P 系统是安卓无论是接收流量还是发送流量,都不能明文传输,需要使用下一代(Transport Layer Security)传输层安全协议,而Android Nougat和Oreo则不受影响。如果WebView 的url使用http协议,同样会出现加载失败,https则不受影响。

如过在Android P(9.0)上依然使用明文传输,则有下面三种解决方案:

1、将APP改用https请求;

2、将targetSdkVersion降到27以下;

3、在res下新建一个xml目录,然后创建一个名为:network_security_config.xml文件,这是一个系统的网络安全配置文件,该文件内容如下:

然后在APP的AndroidManifest.xml文件下的application标签内增加下面一条属性就OK了

————————————————
版权声明:本文为CSDN博主「时代新人」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013184970/article/details/88116680

 Posted by on 2019-11-18

安卓引用资源出现 error: resource android:drawable/…..is private.

 分类:Android, Java 阅读 (1,739)  安卓引用资源出现 error: resource android:drawable/…..is private.已关闭评论
10月 222019
 

原文链接:https://blog.csdn.net/qq_40585267/article/details/96284943

从错误信息可以看出,该资源没有被公开是私有的。导致无法被引用。
我们可以直接将“@android”改成“@*android”
问题解决。。。。

 Posted by on 2019-10-22

adb捕获系统广播的方法

 分类:Android, Android, Java, Operating System 阅读 (5,327)  adb捕获系统广播的方法已关闭评论
10月 182019
 

用于监测最近一段时间内发出的全局广播

adb shell dumpsys activity | grep BroadcastRecord |grep -v android.

grep -v android.意思是不显示包含android.字符的广播

dumpsys显示的广播在10秒左右就会被清除,所以在广播发送以后短时间内才有效

 Posted by on 2019-10-18

Android中ndk开发步骤

 分类:Android, Java 阅读 (1,103)  Android中ndk开发步骤已关闭评论
9月 062019
 
一、环境

Android Studio 3.4.2

c++编译器:cmake

本文从一个不包含c++支持的项目开始添加ndk的开发

二、修改build.gradle

在app/build.gradle中的android节点中增加externalNativeBuild节点,如下:

我们指定cmake的配置文件为CMakeLists.txt,其位置应该在app/CMakeLists.txt

二、创建CMakeLists.txt

创建文件app/CMakeLists.txt

三、新建一个java类用于调用c++的函数

因为jni的函数声明必须和具体的类名关联,我们新建一个CUtils类来处理,新建一个CUtils.java

(Android默认的例子中都是放在MainActivity中,所以你看到的c中的函数名都是类似这样的Java_com_xxx_xx_MainActivity_func这样的)

假设我们要测试一个实现求和的jni函数,名字叫getSum,先在CUtils.java中定义对native中的引用,CUtils.java代码如下:

四、创建c++文件

选择菜单File->New->C/C++ Source File,输入名字test

五、编辑CMakeLists.txt

 

 

 

 Posted by on 2019-09-06

NDK 编译报错 SIMPLE: Error configuring

 分类:Android, Java 阅读 (1,127)  NDK 编译报错 SIMPLE: Error configuring已关闭评论
9月 052019
 

开发环境:Ubuntu 16.04+Android Studio 3.4.2

添加c++文件后gradle编译不过去,报SIMPLE: Error configuring错误

解决办法:

安装ninja-build

sudo apt install ninja-build

 Posted by on 2019-09-05

Java中使用ByteBuffer处理tcp粘包

 分类:Android, Java, Java语言 阅读 (3,257)  Java中使用ByteBuffer处理tcp粘包已关闭评论
8月 222019
 
一、通讯数据格式

通讯协议的约定格式如下:

每一个数据包的长度不固定,但是前四个字节代表的意义是固定的

数据的长度取决于第3个字段的值

名称 长度 其他说明  
协议头 2字节 固定的两个字节,用以给协议分段  
数据类型 1字节 数据内容的类型,用以区别多种内容  
数据长度 1字节 后面数据内容的长度,1字节可表示最大长度是255  
数据 n字节 n取决于上一个字节中的数值  
     
     
     
二、处理的难点
  1. 长度不固定,解析每一组数据时需要先想办法获取数据的长度
  2. 如果发送速度很快,收到一包可能有多组数据,需要一个while循环处理收到的一包的数据(这也就是粘包处理的初衷)
  3. 收到一包数据(本例中使用1024长度的缓冲区接收)可能将某个数据包截成两截,当前缓冲区未解析完的要保留下来,否则会丢数据
三、处理流程图
四、代码

在while(true)里面是读取tcp数据和进行粘包处理的代码

五、其他说明

  1. 串口通讯的粘包处理也可以使用此方法

gradle中动态修改生成的apk的文件名

 分类:Android, Java 阅读 (1,389)  gradle中动态修改生成的apk的文件名已关闭评论
8月 062019
 

在app/build.gradle中的android节点中增加如下代码:

myapp_固定的名称

buildType.name 为release或者debug

${variant.versionName}为versionName

${variant.versionCode}为versionCode

生成的apk的文件名为myapp_debug.apk

 Posted by on 2019-08-06

关于Gson使用的一些深入研究

 分类:Android, Java 阅读 (1,222)  关于Gson使用的一些深入研究已关闭评论
7月 042019
 
一、Gson的复用

一直有一个担心,对于不同的数据类是否可以用同一个gson实例,今天研究了一下,不仅是可以,而且最好是这样使用。看代码Gson.java中的getAdapter方法,一开始就是在typeTokenCache这个缓存中找type相关的TypeAdapter。

因此复用一个gson的实例会省去匹配TypeAdapter(当然还有new Gson())的时间。

如下代码实例:

在我机器上测试不复用的话用时220-260毫秒之间(非常不稳定),复用120毫秒。

二、TypeToken是个什么东东?

TypeToken其实是为了给标识一个泛型类中的T,对于普通的类我们通过getClass().getName就可以得到类的标识,但是对于泛型类,只能得到泛型外层的类名,并不能得到泛型外层类+泛型类这样的全名。

如下代码:

输出结果是:java.util.ArrayList,而不是java.util.ArrayList<java.lang.Integer>

使用TypeToken来获取就是另外一种情况了,看下面的例子:

输出结果:

三、TypeAdapter的使用

 

四、一些类的作用

1. ConstructorConstructor – 返回一个函数可以给要操作的类新建一个实例对象。

2. InstanceCreator – 用于给没有无参数构造函数的类,创建一个实例的一个接口。解释:gson在反序列时需要创建类的一个实例,如果该类没有无参数构造函数(如:三方库中的类),则会出现异常,所以开发者需要新建一个类实现这个接口,并用该类可用的构造函数新建一个实例。并使用下面方式Gson gson = new GsonBuilder().registerTypeAdapter(Id.class, new IdInstanceCreator()).create();注册到gson中。

3. FutureTypeAdapter – 用于缓存TypeAdapter。为什么不用TypeAdapter的实例缓存?因为TypeAdapter是个虚类 :-D