Too many open files : E Parcel : dup() failed in Parcel::read, i is 1, fds[i] is -1, fd_count is 2, error:Too many open files
解决:linux应用进程一般允许启用1024个文件描述符(FD),如果有资源占用并且忘记释放,非常容易超出,比如打开匿名共享内存或在jni中opendir不调用closedir
1. 查看应用pid
2. ls -a -l /proc/<pid>/fd
查看异常文件描述符,对应处理
FFMPEG YUV视频抽帧
$ ffmpeg -y -s 1088x1920 -i /Users/loki/Desktop/tmp_live1_0.yuv ../test.jpg
FFMPEG 视频抽帧
$ ffmpeg -i vid.avi -r 20 mmm%5d.png
线程绑核
#define __USE_GNU
#include<sched.h>
static int getCores() {
return sysconf(_SC_NPROCESSORS_CONF);
}
jint JNI_bindToCpu(JNIEnv *env,jclass type, jint cpu) {
int cores = getCores();
if(cpu>=cores){
return -2;
}
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(cpu,&mask);
if(sched_setaffinity(0, sizeof(mask), &mask)==-1){
return -1;
}
return 0;
}
$ adb shell ps -t -p -c
可以看出test thread以及jni内部线程均运行在1核上
Android Studio NDK问题
NDK not configured. Download it with SDK manager. Preferred NDK version is '20.0.5594570'. Log: /Users/loki/Desktop/work/proj_out/PassengerMock/moc2/.cxx/ndk_locator_record.json
在项目local.properties中配置ndk.dir
Failed resolution of: Landroidx/localbroadcastmanager/content/LocalBroadcastManager;
解决: gradle中添加依赖: implementation 'androidx.legacy:legacy-support-v4:1.0.0'
使用命令重新签系统的签名
$ java -Djava.library.path=. -jar signapk.jar platform.x509.pem platfrom.pk8 app.apk out.apk