完成后配置环境变量:
之后在安装目录找到msys.bat并打开,后面会用到。
第三步,找到ffmpeg目录下的configure文件,将如下代码(有人反馈说复制下面的代码后每行末尾会多出两个空格,发现确实如此,因此复制后需要手动去掉空格))
[java]
view plain
copy
- SLIBNAME_WITH_MAJOR=‘ ( S L I B N A M E ) . (SLIBNAME). (SLIBNAME).(LIBMAJOR)’
- LIB_INSTALL_EXTRA_CMD=‘$ ( R A N L I B ) " (RANLIB) " (RANLIB) "(LIBDIR)/$(LIBNAME)"’
- SLIB_INSTALL_NAME=‘$(SLIBNAME_WITH_VERSION)’
- SLIB_INSTALL_LINKS=‘ ( S L I B N A M E _ W I T H _ M A J O R ) (SLIBNAME\_WITH\_MAJOR) (SLIBNAME_WITH_MAJOR) (SLIBNAME)’
替换为:
[java]
view plain
copy
- SLIBNAME_WITH_MAJOR=‘ ( S L I B P R E F ) (SLIBPREF) (SLIBPREF)(FULLNAME)- ( L I B M A J O R ) (LIBMAJOR) (LIBMAJOR)(SLIBSUF)’
- LIB_INSTALL_EXTRA_CMD=‘$ ( R A N L I B ) " (RANLIB) " (RANLIB) "(LIBDIR)/$(LIBNAME)"’
- SLIB_INSTALL_NAME=‘$(SLIBNAME_WITH_MAJOR)’
- SLIB_INSTALL_LINKS=‘$(SLIBNAME)’
我的
#SLIBNAME_WITH_MAJOR=‘
(
S
L
I
B
N
A
M
E
)
.
(SLIBNAME).
(SLIBNAME).(LIBMAJOR)’
#LIB_INSTALL_EXTRA_CMD=‘$
(
R
A
N
L
I
B
)
"
(RANLIB) "
(RANLIB)"(LIBDIR)/KaTeX parse error: Expected 'EOF', got '#' at position 16: (LIBNAME)"' #̲SLIB\_INSTALL\_…(SLIBNAME_WITH_VERSION)’
#SLIB_INSTALL_LINKS=‘$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)’
VERSION_SCRIPT_POSTPROCESS_CMD=“cat”
SLIBNAME_WITH_MAJOR=‘
(
S
L
I
B
P
R
E
F
)
(SLIBPREF)
(SLIBPREF)(FULLNAME)-
(
L
I
B
M
A
J
O
R
)
(LIBMAJOR)
(LIBMAJOR)(SLIBSUF)’
LIB_INSTALL_EXTRA_CMD=‘$
(
R
A
N
L
I
B
)
"
(RANLIB) "
(RANLIB)"(LIBDIR)/
(
L
I
B
N
A
M
E
)
"
′
S
L
I
B
_
I
N
S
T
A
L
L
_
N
A
M
E
=
′
(LIBNAME)"' SLIB\_INSTALL\_NAME='
(LIBNAME)"′SLIB_INSTALL_NAME=′(SLIBNAME_WITH_MAJOR)’
SLIB_INSTALL_LINKS=‘$(SLIBNAME)’
如下图,这是因为android so命名的需要。
第四步,新建一个build_android.sh,里面的代码如下:(有人反馈说复制下面的代码后每行末尾会多出两个空格,发现确实如此,因此复制后需要手动去掉空格)
#!/bin/bash
export TMPDIR=G:/ffmpeg/tmpdir
NDK=E:/androidstudio/sdk/ndk-bundle
SYSROOT=
N
D
K
/
p
l
a
t
f
o
r
m
s
/
a
n
d
r
o
i
d
−
18
/
a
r
c
h
−
a
r
m
T
O
O
L
C
H
A
I
N
=
NDK/platforms/android-18/arch-arm TOOLCHAIN=
NDK/platforms/android−18/arch−armTOOLCHAIN=NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=G:/ffmpeg/output/$CPU
ADDI_CFLAGS=“-Os -fpic -marm”
function build_one
{
./configure \
–prefix=
P
R
E
F
I
X
−
−
e
n
a
b
l
e
−
s
h
a
r
e
d
−
−
e
n
a
b
l
e
−
s
t
a
t
i
c
−
−
e
n
a
b
l
e
−
a
s
m
−
−
e
n
a
b
l
e
−
n
e
o
n
−
−
d
i
s
a
b
l
e
−
d
o
c
−
−
d
i
s
a
b
l
e
−
f
f
m
p
e
g
−
−
d
i
s
a
b
l
e
−
f
f
p
l
a
y
−
−
d
i
s
a
b
l
e
−
f
f
p
r
o
b
e
−
−
d
i
s
a
b
l
e
−
f
f
s
e
r
v
e
r
−
−
d
i
s
a
b
l
e
−
d
o
c
−
−
d
i
s
a
b
l
e
−
s
y
m
v
e
r
−
−
e
n
a
b
l
e
−
p
t
h
r
e
a
d
s
−
−
e
n
a
b
l
e
−
s
m
a
l
l
−
−
e
n
a
b
l
e
−
j
n
i
−
−
e
n
a
b
l
e
−
m
e
d
i
a
c
o
d
e
c
−
−
e
n
a
b
l
e
−
r
u
n
t
i
m
e
−
c
p
u
d
e
t
e
c
t
−
−
c
r
o
s
s
−
p
r
e
f
i
x
=
PREFIX \ --enable-shared \ --enable-static \ --enable-asm \ --enable-neon \ --disable-doc \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --disable-doc \ --disable-symver \ --enable-pthreads \ --enable-small \ --enable-jni \ --enable-mediacodec \ --enable-runtime-cpudetect \ --cross-prefix=
PREFIX −−enable−shared −−enable−static −−enable−asm −−enable−neon −−disable−doc −−disable−ffmpeg −−disable−ffplay −−disable−ffprobe −−disable−ffserver −−disable−doc −−disable−symver −−enable−pthreads −−enable−small −−enable−jni −−enable−mediacodec −−enable−runtime−cpudetect −−cross−prefix=TOOLCHAIN/bin/arm-linux-androideabi- \
–target-os=android \
–arch=arm \
–enable-cross-compile \
–sysroot=
S
Y
S
R
O
O
T
−
−
e
x
t
r
a
−
c
f
l
a
g
s
=
"
SYSROOT \ --extra-cflags="
SYSROOT −−extra−cflags="ADDI_CFLAGS" \
–extra-ldflags=“$ADDI_LDFLAGS” \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_one
read -p “Press any key to continue.”
其中,
TMPDIR是个临时目录,编译时需要用到,这个可以随意指定路径,但必须保证路径存在;
NDK则替换为你本机的ndk路径;
SYSROOT根据你的本机设置,但不要大于你的target,比如你的target是22,就不要用 大于android-22的;
PREFIX则是编译后so的存放地址,路径可以随便指定。
–enable-shared:生成动态库so
–enable-static:生成静态库
关于参数的作用,可以打开ffmpeg源码目录下的configure文件,里面都有对应的英文说明,举个栗子:“–enable-mediacodec enable Android MediaCodec support [no]”
特别需要说明的是target-os,这个如果指定linux的话则需要执行第三步的文件修改,如果是android则可以直接略过第三步,因为在configure文件中已经对target-os作了判断,如果是android会帮我们做类似于第三步的操作。
第五步,在刚刚打开的mingw中切换到ffmpeg路径下,执行build_android.sh
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上我搜集整理的2019-2021BATJ 面试真题解析,我把大厂面试中常被问到的技术点整理成了PDF,包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
《960全网最全Android开发笔记》
《379页Android开发面试宝典》
历时半年,我们整理了这份市面上最全面的安卓面试题解析大全
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
如何使用它?
1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数
《507页Android开发相关源码解析》
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析
资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图
识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
[外链图片转存中…(img-4b5t335I-1720102307784)]
腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析
[外链图片转存中…(img-sbcfOYtX-1720102307784)]
资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图