搜档网
当前位置:搜档网 › Android自定义so文件调用ffmpeg.so详解

Android自定义so文件调用ffmpeg.so详解

Android自定义so文件调用ffmpeg.so详解
Android自定义so文件调用ffmpeg.so详解

Android自定义so文件调用ffmpeg.so详解

在使用一下介绍内容时候,我认为所有读者都已具备一下水平:

1、会建立android项目工程

2、了解NDK编程入门知识

3、已成功编译或在网上已下载到ffmpeg.so动态库文件

我自己成功编译ffmpeg.so文件:使用vitamio提供的.sh脚本文件在linux环境下编译的,编译过程此处略去一万字…

1、在NDK的samples下建立android工程,此处我建立的是HelloFFmpeg,如下图:

2、编写本地函数声明,NDK的samples目录下有一个hello-jni的例子:

使用UltraEdit打开HelloJni.java文件:

将该文件的的一下内容拷贝到HelloFFmpeg工程的MainActivity.java的相应位置:(1)、拷贝onCreate中的内容:

(2)、拷贝本地函数声明:

(3)、拷贝库文件加载:

打开拷贝完成的HelloFFmpeg工程下的MainActivity.java文件,如下:

新建立jni目录:

在jni目录下建立再建立jni目录

这里通过cmd进入第二个jni目录:

输入以下内容生成.h头文件:

此时会报错,因为咱们的本地函数和本地库的引用均在主类MainActivity中声明引用的,一般重新创建一个类进行声明引用的时候是不会出错的。但此时我给大家提供一个解决该错误的方法:

进入src目录中,使用下面的语句:

其中:

-d:代表.h所在的目录,如果目录不存在,则自动创建一个

../jni/jni:代表上级目录中的jni目录,.h文件将存放在此处

在工程上刷新,就出现.h头文件了:

5、创建.c文件

在c文件中包含刚才生成的头文件,并将头文件的函数声明部分拷贝到c文件中:

6、包含头文件

(1)先给大家看看我使用vitamio生成库文件后的文件目录:

所有的so库都在build文件夹中

该文件夹中包含了支持不同cpu特性的so库

我使用armv7的so库

(2)在工程jni目录下建立include目录

将armv7/include下的文件夹全部拷贝到工程下的include文件夹下

(3)在c文件中包含头文件

7、包含ffmpeg.so动态库

(1)建立pretuilt目录,并将ffmpeg.so拷贝进去

在prebuilt下建立Android.mk文件

内容如下

(2)在jni目录下建立Android.mk文件

内容如下

(4)在jni/jni目录下建立Android.mk文件

内容如下

参数说明:

LOCAL_C_INCLUDES:为包含头文件目录,前面留空白区域不是空格,是按Tab键生成的,这个一定要注意,不然交叉编译时候会出错

LOCAL_SHARED_LIBRARIES:为共享库,此处为全称libffmpeg

LOCAL_MODULE:MainActivity中声明引用的hello-jni

LOCAL_SRC_FILES:c源文件名

8、编写c文件,内容如下,此函数返回ffmpeg版本号

9、修改include头文件

当直接交叉编译以上内容时会报错,提示找不到某某.h文件,原因是include文件夹中的.h头文件调用逻辑问题,导致交叉编译时找不到头文件

例如libavcodec/avcodec.h头文件中:

将所有没有包含在libavcodec目录下的头文件引用路径全部修改,修改后如下:

依照以上步骤,检查所有的头文件引用,以防编译出错10、交叉编译

(1) 打开Cywin,进入到工程目录下

(2)编译

输入../../ndk-build进行编译

Oh my god!出现了以上错误,现在你是否要崩溃了,别急,现在使用以下方法:

在工程路径下:

输入:cd obj/local/armeabi

输入:chmod 777 ./*

(注:上面的错误的结果是没有生成libs文件,但生成了obj文件,因此改这个错误的时候obj不要删)

刷新工程,出现so文件

此时运行程序,会报错,究其原因,是因为MainActivity中未包含ffmpeg动态库文件,修改MainActivity如下

重新编译成功,如下图:

刷新工程,此时libs下便出现了两个so动态库:

此时重新运行工程,将打印ffmpeg版本号,如下图:

此处再次省略一万字…

android 自定义圆角头像以及使用declare-styleable进行配置属性解析

android 自定义圆角头像以及使用declare-styleable进行配置属性解析由于最新项目中正在检查UI是否与效果图匹配,结果关于联系人模块给的默认图片是四角稍带弧度的圆角,而我们截取的图片是正方形的,现在要给应用统一替换。应用中既用到大圆角头像(即整个头像是圆的)又用到四角稍带弧度的圆角头像,封装一下以便重用。以下直接见代码 [java] view plain copy 在CODE上查看代码片派生到我的代码片 package com.test.demo; import com.test.demo.R; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Shader.TileMode; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Parcelable; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.widget.ImageView; /** * 圆角imageview */ public class RoundImageView extends ImageView { private static final String TAG = "RoundImageView"; /** * 图片的类型,圆形or圆角 */ private int type; public static final int TYPE_CIRCLE = 0; public static final int TYPE_ROUND = 1; /** * 圆角大小的默认值

Android开发规范参考文档

Android开发参考文档 一、Android编码规范 1. java代码中不出现中文,最多注释中可以出现中文.xml代码中注释 2. 成员变量,局部变量、静态成员变量命名、常量(宏)命名 1). 成员变量: activity中的成员变量以m开头,后面的单词首字母大写(如Button mBackButton; String mName);实体类和自定义View的成员变量可以不以m开头(如ImageView imageView,String name), 2). 局部变量命名:只能包含字母,组合变量单词首字母出第一个外,都为大写,其他字母都为小写 3). 常量(宏)命名: 只能包含字母和_,字母全部大写,单词之间用_隔开UMENG_APP_KEY 3. Application命名 项目名称+App,如SlimApp,里面可以存放全局变量,但是杜绝存放过大的实体对象4. activity和其中的view变量命名 activity命名模式为:逻辑名称+Activity view命名模式为:逻辑名称+View 建议:如果layout文件很复杂,建议将layout分成多个模块,每个模块定义一个moduleViewHolder,其成员变量包含所属view 5. layout及其id命名规则 layout命名模式:activity_逻辑名称,或者把对应的activity的名字用“_”把单词分开。

命名模式为:view缩写_模块名称_view的逻辑名称, 用单词首字母进行缩写 view的缩写详情如下 LayoutView:lv RelativeView:rv TextView:tv ImageView:iv ImageButton:ib Button:btn 6. strings.xml中的 1). id命名模式: activity名称_功能模块名称_逻辑名称/activity名称_逻辑名称/common_逻辑名称,strings.xml中,使用activity名称注释,将文件内容区分开来 2). strings.xml中使用%1$s实现字符串的通配,合起来写 7. drawable中的图片命名 命名模式:activity名称_逻辑名称/common_逻辑名称/ic_逻辑名称 (逻辑名称: 这是一个什么样的图片,展示功能是什么) 8. styles.xml 将layout中不断重现的style提炼出通用的style通用组件,放到styles.xml中; 9. 使用layer-list和selector,主要是View onCclick onTouch等事件界面反映

Android系统哪些程序可以删除

Android系统哪些程序可以删除(仅供参考) 发布时间:2011-08-05 11:42:09 来源:本站原创浏览数:3605 资讯摘要:Android手机系统中默认会自带很多无用程序,这些应用,平时很少用不到,但因为是系统自带的,所以它们像牛皮癣一样内嵌在手机里,无法去除。下面列举一些能够删除和不能够删除的软件列表,希望对G友有用!怎么删除呢?当然是下载一个安卓优化大师 V2.0.2.apk来删除AccountsyncManager.apk(社交网络账号管理程序)#就是管理Facebook、Flickr账号的程序。删除了,未发现异... 字号:小中大 Android 手机系统中默认会自带很多无用程序,这些应用,平时很少用不到,但因为是系统自带的,所以它们像牛皮癣一样内嵌在手机里,无法去除。下面列举一些能够删除和不能够删除的软件列表,希望对G友有用!怎么删除呢?当然是下载一个安卓优化大师 V2.0.2.apk来删除 AccountsyncManager.apk(社交网络账号管理程序)#就是管理Facebook、Flickr账号的程序。删除了,未发现异常。 Browser.apk(浏览器) Calculator.apk(计算器) Calendar.apk(日历) CalendarProvider.apk(日历存储) checkin.apk(签入) CheckinProvider.apk(签入服务) com.htc.MusicWidget.apk(音乐小插件) com.htc.WeatherWidget.apk(天气小插件) Gmail.apk(GMail)#Google提供的免费网络邮件服务 GmailProvider.apk(Gmail存储) gtalkservice.apk(GTalk服务) Googlesubscribedfeedsprovider(同步供稿,不知道干什么的,删了) HTC_CIME.apk(Touch Input 中文)#可移除,但移除后在第一次进系统弹出的设置向导时要跳过键盘测试,否则会崩溃。 HTC_IME.apk(Touch Input)#同上 HTCAlbum.apk(相册) htccalendarwidgets.apk(日历小插件) HTCCamera.apk(相机) HtcClockWidget.apk(时钟小插件) HtcContacts.apk(联系人) htccontactwidgets.apk(联系人小插件) htcmailwidgets.apk(邮件小插件) htcmsgwidgets.apk(信息小插件) HtcMusic.apk(音乐) HtcPhotoWidget.apk(照片小插件) htcsearchwidgets.apk(搜索小插件)

Android平台我的日记设计文档

Android平台我的日记 设计文档 项目名称:mydiray 项目结构示意: 阶段任务名称(一)布局的设计 开始时间: 结束时间: 设计者: 梁凌旭 一、本次任务完成的功能 1、各控件的显示 二、最终功能及效果 三、涉及知识点介绍 四、代码设计 activity_main.xml:

android:layout_centerHorizontal="true" android:layout_marginTop="88dp" android:text="@string/wo" android:textSize="35sp"/>