Android音频系统的Standby模式问题
背景
Platform: RK3399
OS: Android7.1.2
Kernel: v4.4.103
问题:当使用MediaPlayer停止本地播放后,如果切换我们自定义的音频通道(线路输入,只有模拟通道,数字通道没有工作),开始正常但隔几秒钟后就会没声音输出
原因分析Android系统默认播放停止后3秒(默认)会进入Standby模式来降低功耗。这个主要是通过AudioFlinger控制的,当AudioFlinger检测到没有AudioTrack处于活动状态,且达到standbyTime的延时时间就会进入Standby模式,系统系统会进入待机,关闭所有的输出设备,Standby模式后具体的一些操作可在tinyalsa HAL层standby调用接口里找到
解决1. 禁止Standbytinyalsa HAL层有standby调用接口(out->stream.common.standby = out_standby),开始打算直接屏蔽掉,但发现里面有route_pcm_close等其他操作,而且有很多地方有调用,可能会引起系统其他问题,所以就采用了下面的方法2. 延长St ...
SDIO WiFi问题排查
背景
Platform: RK3399
OS: Android7.1.2
Kernel: v4.4.103
问题:Android系统没法打开wifi,10几台机器,有1,2台可以,其他要么一直不行,要么时好时坏,不稳定。log打印,SDIO传输下载wifi固件失败:
[ 32.446909] sdioh_buffer_tofrom_bus: TX FAILED ffffffc07aac3000, addr=0x0c000,pkt_len=2048, ERR=-84[ 32.446937] dhdsdio_membytes: membytes transfer failed[ 32.448113] dwmmc_rockchip fe310000.dwmmc: All phases bad![ 32.448167] mmc1: tuning execution failed[ 32.448195] bcmsdh_sdmmc: Failed to Write byte F1:@0x1000a=00, Err: -5
原因配置的SDIO的时钟太高,硬件PCB设计不 ...
Android添加物理按键
背景
Platform: RK3399
OS: Android7.1.2
Kernel: v4.4.103
调试
通过命令cat /proc/bus/input/devices 确认按键使用的键值对的文件名 通过“name”字段判断。
getevent可以查看上报的键值和状态
添加android已有的功能按键当新增的按键功能是android系统默认自带的,需要在frameworks/base/data/keyboards/Generic.kl 中找到你需要的按键键值然后在对应的dts中添加对应的按键映射就可以了。需确保使用的键值对的文件device/rockchip/common/rk29-keypad.kl里也有该键值对
添加自定义按键具体可以参考某个已有的按键,在同一位置添加自定义按键
在device/rockchip/common/rk29-keypad.kl 中添加按键的键值对。驱动上报的键值。
frameworks/native/include/android/keycodes.h 和frameworks/native/include/input/InputEventL ...
IMX6Q-Linux(QT)双屏同显
背景
Platform: IMX6Q
OS: Linux-QT5
Kernel: 4.1.15
需求因项目需求,需要在imx6Q-Linux(QT)上实现双屏同显(LVDS+HDMI)QT:5.8LVDS(1280*800)HDMI(此方法只支持1280*720,因为LVDS屏为1280*800,所以做720P不需要进行缩放或拉伸)
方法
修改DTS的HDMI对应的fb的配置mode_str ="1280x720M@60";
修改fb的驱动(drivers/video/fbdev/mxc/mxc_ipuv3_fb.c)://mxcfb_set_par函数, 处理mxcfb_unmap_video_memory:
if(strcmp("DISP3 BG", fbi->fix.id) == 0){
for (i = 0; i < num_registered_fb; i++) {
if(strcmp("DISP4 BG", registere ...
Android内嵌web服务器
背景因项目需求,需要在Android(7.1.2)中内嵌web服务器(lighttpd+PHP环境)硬件平台: RK3399
方案选择
通过现成的APK安装:https://zhuanlan.zhihu.com/p/34730760https://blog.csdn.net/Jye13/article/details/8987620?locationNum=4版本低,自由度低,自己不好把控
自己移植,复杂参考:android 自己移植编译lighttpd:http://blog.chinaunix.net/uid-14735472-id-5213247.html
内嵌Linux+chroot,通过buildroot构建,方便扩展,之前老项目用过,可行性高
先通过apk(Linux Deploy)安装Linux发行版,再编译安装Lighttpd + phphttp://www.webhek.com/post/instll-lighttpd-php-sqlite3-on-android-arm-linux.html需要手机root
最终选择用方案3, 采用buildroot+chroot ...
adb与fastboot相关
Ubuntu下adb安装配置:
安装:sudo apt-get install android-tools-adb
配置adb_usb.ini:a. lsusb查看Android设备的idVendor:
Bus 001 Device 001: ID ==1d6b==:==0002== Linux Foundation 2.0 root hub
b. echo 0x$idVendor > ~/.android/adb_usb.ini
配置android.rules,创建/etc/udev/rules.d/70-android.rules文件,添加:SUBSYSTEM=="usb",ATTR{idVendor}=="1d6b", ATTRS{idProduct}=="0002" ,MODE="0666"
重新插拔 USB 线,或运行以下命令,让 udev 规则生效:chmod 666 /etc/udev/rules.d/70-android.rulesse ...
Git clone断点续传
配置压缩级别(非必需)git config --global core.compression -1
core.compression一个整数-1..9,表示默认的压缩级别。-1是 zlib 的默认值。0代表没有压缩,1..9代表不同的速度/尺寸折衷,9代表最慢。如果设置,则会为其他压缩变量(如core.looseCompression和)提供默认值pack.compression
通过fetch方式进入目录执行 git init生成.git索引文件夹执行 git fetch GIT_REPO_URL, 如果掉线,可继续重复执行该命令知道看到如下标志表示fetch成功:From GIT_REPO_URL*branch HEAD -> FETCH_HEAD最后执行 git checkout FETCH_HEAD
不使用https方式,而是ssh
Git克隆速度慢及'RPC'错误
背景网络情况不稳定下克隆大文件项目(Android升级代码)时,特别是国外的仓库(如gitlab.com),会出现类似错误:
error: RPC failed; curl 18 transfer closed with outstanding read data remainingfatal: The remote end hung up unexpectedlyfatal: early EOF
参考:https://blog.csdn.net/qq_34121797/article/details/79561110
解决:查看当前git配置git config -l
加大httpBuffergit config --global http.postBuffer 524288000
修改压缩配置git config --global core.compression -1
修改配置文件打开调试命令
export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1
Android5.1去掉彩蛋
背景
Platform: IMX6Q
OS: Android5.1
Kernel: 3.14.52
android彩蛋:点击Setting->关于->Android版本多次会出现Android彩蛋
处理相关处理代买在packages\apps\Settings\src\com\android\settings\DeviceInfoSettings.java定位函数在
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)
屏蔽掉里面处理Android版本点击的代码
Android5.1第三方APP对SD卡没有写权限
背景
Platform: IMX6Q
OS: Android5.1
Kernel: 3.14.52
android5.1第三方APP对SD卡没有写权限:http://blog.csdn.net/peng_cao/article/details/50508700在Android kk版本之后(4.4, 5.0, 5.1, 6.0…);一般的应用程序(APP)是无法访问(读/写)外置SD卡的;仅仅只有系统级别的并且使用系统签名的APP可以访问外置SD卡在AndroidManifest.xml中添加android.permission.WRITE_MEDIA_STORAGE在Android.mk中添加LOCAL_CERTIFICATE := platform不要在AndroidManifest.xml中添加share System UID 添加android.sharedUserId="android.uid.system"第三方APP只能访问外置SD卡的应用程序目录,例如:*Android/data/com.example.foo/系统APP只有使用了系统签名(pla ...
Android5.1支持多个U盘挂载
背景
Platform: IMX6Q
OS: Android5.1
Kernel: 3.14.52
Android5.1支持多个U盘挂载:
device/xx/init.rc, 增加挂载点文件夹 mkdir /mnt/media_rw/udisk1 0755 system system
symlink /mnt/media_rw/udisk1 /storage/udisk1
mkdir /mnt/media_rw/udisk2 0755 system system
symlink /mnt/media_rw/udisk2 /storage/udisk2
device/xx/overlay/frameworks/base/core/res/res/xml/storage_list.xml,增加storage元素: <storage android:mountPoint="/storage/udisk1"
android: ...
Android5.1去掉锁屏
背景
Platform: IMX6Q
OS: Android5.1
Kernel: 3.14.52
修改默认锁屏修改设置里面的默认参数路径:frameworks\base\packages\SettingsProvider\res\values\defaults.xmldef_lockscreen_disabled 改为 true<bool name="def_lockscreen_disabled">true</bool>
rm out/target/product/xxx/system/framework/framework.jar
rm out/target/product/xxx/system/priv-app/SettingsProvider/SettingsProvider.apk
修改完重新编译mm ,再恢复出厂设置或者重新编译源码
如果不起效果,可以在mk文件(最好的在device/xxx下面)加 ...