Android中获取应用的安装器名称

 分类:Android, Java 阅读 (100)  Android中获取应用的安装器名称已关闭评论
11月 292019
 

通过获取安装器的名称我们可以判断应用是来自哪个应用市场

当然现在普遍是通过配置gradle来区别应用的安装渠道,不过这个还可以用于判断用户是不是手动进行安装的

代码很简单,如下:

结果示例:

如:com.huawei.appmarket – 是华为应用市场

com.android.packageinstaller – 是用户手动安装的

 Posted by on 2019-11-29

通过action获取其他应用中的Activity

 分类:Android, Java 阅读 (151)  通过action获取其他应用中的Activity已关闭评论
11月 292019
 

测试环境:自己编译的Android8.1系统(userDebug模式)

首先目标应用的AndroidManifest.xml中定义Activity的时候,必须设置一个intent-filter以及action属性,如下:

上面的代码Test1Activity和Test2Activity都有一个intent-filter属性,以及他下面的action子属性

然后使用下面的代码就可以获取这个应用中的有action=”action_abc”的activity了。

 

 Posted by on 2019-11-29

imx8+android8.1开启adb remount过程

 分类:Android, Java, Uncategorized 阅读 (322)  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 阅读 (259)  如何让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 阅读 (1,203)  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 阅读 (104)  安卓引用资源出现 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 阅读 (300)  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 阅读 (272)  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 阅读 (202)  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语言 阅读 (334)  Java中使用ByteBuffer处理tcp粘包已关闭评论
8月 222019
 
一、通讯数据格式

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

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

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

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

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

五、其他说明

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