当前位置: 首页 > 知识库问答 >
问题:

AndroidNDK

谭京
2023-03-14

我试图建立FFMPEG库为我的Android应用程序使用NDK。我已经从它的网站上下载了源代码,我想我构建了它(这是我第一次尝试使用NDK和ffmpeg)。我已经创建了一个build.sh文件,我正在使用它从Mac OS X上的命令行执行它。

首先,我知道我需要Android。mk文件,所以我可以在我的应用程序中使用构建的库,但我不知道如何做到这一点,原因我在上面告诉过你。在我运行构建之后。shandroidandroid文件夹中有一些文件夹和一些库。所以我的第一个问题是,我如何构建Android。我需要的mk文件。。。也许有人能解释我为什么需要它。

我的第二个问题是,我需要一些来自ffmpeg的库,以便能够从我的应用程序中使用它们,但在构建之后,我无法在源代码树中看到它们。我知道我必须在构建中启用它们。sh我想我看到了,但我看不到它们。因此,任何关于构建文件的信息都将有助于我理解如何配置它。下面是它的样子:

    #!/bin/bash
######################################################
# Usage:
# put this script in top of FFmpeg source tree
# ./build_android
# It generates binary for following architectures:
# ARMv6 
# ARMv6+VFP 
# ARMv7+VFPv3-d16 (Tegra2) 
# ARMv7+Neon (Cortex-A8)
# Customizing:
# 1. Feel free to change ./configure parameters for more features
# 2. To adapt other ARM variants
# set $CPU and $OPTIMIZE_CFLAGS 
# call build_one
######################################################
NDK=~/Desktop/android-ndk-r5b
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86
function build_one
{
./configure \
    --target-os=darwin \
    --prefix=$PREFIX \
    --enable-cross-compile \
    --extra-libs="-lgcc" \
    --arch=arm \
    --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
    --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
    --nm=$PREBUILT/bin/arm-linux-androideabi-nm \
    --sysroot=$PLATFORM \
    --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffserver \
    --disable-ffprobe \
    --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \
    --enable-zlib \
    --enable-version3 \
    --enable-nonfree \
    --enable-libmp3lame \
    --enable-libspeex \
    --enable-libtheora \
    --enable-libfaac \
    --enable-libvorbis \
    --enable-libaacplus \
    --prefix=$DIST_DIR \
    $ADDITIONAL_CONFIGURE_FLAG

make clean
make  -j4 install
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib  -soname libffmpeg.so -shared -nostdlib  -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog  --warn-once  --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
}

#arm v6
#CPU=armv6
#OPTIMIZE_CFLAGS="-marm -march=$CPU"
#PREFIX=./android/$CPU 
#ADDITIONAL_CONFIGURE_FLAG=
#build_one

#arm v7vfpv3
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one

#arm v7vfp
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
#PREFIX=./android/$CPU-vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one

#arm v7n
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"
#PREFIX=./android/$CPU 
#ADDITIONAL_CONFIGURE_FLAG=--enable-neon
#build_one

#arm v6+vfp
#CPU=armv6
#OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"
#PREFIX=./android/${CPU}_vfp 
#ADDITIONAL_CONFIGURE_FLAG=
#build_one

感谢您提供任何有用的信息/建议/示例等。

共有3个答案

狄新立
2023-03-14

首先,您应该阅读Android NDK的留档,并查看一些示例应用程序。您可以在android_NDK_home/文档和android_NDK_home/示例中找到这些详细信息(其中android_NDK_home是Android NDK的文件夹名称)。

另外,检查stackoverflow上的链接:将FFmpeg与Android NDK一起使用

对于一步一步的教程,这是一个很好的:http://www.roman10.net/how-to-build-ffmpeg-for-android/

此外,您还必须在Eclipse上安装/配置一些元素,以支持开发使用NDK:http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/构建的应用程序http://wiki.eclipse.org/Sequoyah/ndk_checklist

还有一个使用ffmpeg库的非常好的项目:https://github.com/havlenapetr/FFMpeg

华宪
2023-03-14

如果您想了解有关如何构建ffmpeg以及如何使用它构建Android应用程序的更详细说明,请参阅《Android NDK食谱:http://www.packtpub.com/android-native-development-kit-cookbook/book

奖金第1章致力于使用Android NDK和ffmpeg开发多媒体应用程序,可在http://www.packtpub.com/sites/default/files/downloads/Developing_Multimedia_Applications_with_NDK.pdf

洪景铄
2023-03-14

我做了一个关于如何为android构建ffmpegx264的教程:使用x264构建ffmpeg

您还可以下载包含在android上制作应用程序所需文件的zip文件。

 类似资料:
  • 在项目设置(文件- 点击下载Android NDK简短地显示一些对话框。安装了几个版本的NDK: 我的设置有什么问题? 主机:Ubuntu 18.04 LTS Android Studio 4.1.1构建#AI-201.8743.12.41.6953283,构建于2020年11月5日运行时版本: 1.8.0_242-发布-1644-b3-6222593 amd64 VM: OpenJDK 64位服

  • 这是一个普通的问题,但我在stackoverflow中找不到任何类似的问题来讨论Android SDK/NDK最近版本的解决方案。 我的目的是将Android NDK打包为apk文件。 所以: 我将Android NDK安装到 /opt目录-称为 /opt/. 和cd /opt//样本/哪里是任何示例。 然后输入/opt//ndk-build,就编译好了: /opt/Android-SDK-Lin

  • 两年前,我在android-7(艾克蕾尔)上开发了一个增强现实框架。由于AR应用是计算密集型任务,我开发了一个JNI c库,Java活动使用它来渲染和注册虚拟环境。在Java中获得的传感器读数被传递给underline c库,以计算虚拟环境的注册。三维对象是通过从GLSurfaceView调用的本地绘制函数来呈现的。这导致了大量的JNI呼叫。 现在我想将应用程序移植到android-15(冰淇淋三

  • 我的Android应用在使用时崩溃 这是我收到的唯一明显的错误消息: 无法将堆栈跟踪写入/data/anr/跟踪。txt(6738中的5571):没有这样的文件或目录 libMySharedLib.so 是从 ndk-build 生成的。我正在使用powerVR SDK,因此我假设这个库是事先在内部加载的。 如果我将我的代码分离到一个不同的共享库中,我可以让它工作,但这违背了我的需要(所有数据、指

  • 我刚刚创建了第一个使用JNI和NDK的Android应用程序,简单的Hello JNI。具有返回字符串的唯一函数。我签署了APK解包,如果我看到的.so文件似乎不是本地编译的。我想要一个二进制代码。我读取函数和字符串的名称。我的目标是使用SDK编写本机代码来隐藏未被proguard遮挡的字符串。我用的是Android Studio 2.1.2 建筑格拉德尔项目 Build.Gradle 应用 gr