Android Studio中如何将ijkplayer 0.6.3导入自己的项目中并使用
Ijkplayer 0.6.3是较新的版本,其中的ijk-example增强了不少功能,但是里面的一些资源由于增加了依赖,使得要使用ijk-example中的资源,不像以前版本那样只须把我们需要的几个java文件简单拷贝到自己工程目录下,便可直接调用,本文作者因此也走了不少弯路,今天将作者实测的导入方法作个共享。
方法一:导入基本库及ijk-example使用
这种方法重点在于将ijkplayer-example导入为Module并通过修改成library,才能在自己的项目中调用ijkplayer-example中的资源,如:IjkVideoView,具体步骤如下:
1. 在工程根目录下的build.gradle文件中增加
ext {
compileSdkVersion =24
buildToolsVersion ="24.0.1"
targetSdkVersion =24
versionCode =603000
versionName ="0.6.3"
}
compileSdkVersion、buildToolsVersion和targetSdkVersion根据自己的设置修改,我的完整的文件如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath'com.android.tools.build:gradle:2.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
ext {
compileSdkVersion =24
buildToolsVersion ="24.0.1"
targetSdkVersion =24
versionCode =603000
versionName ="0.6.3"
}
task clean(type: Delete) {
deleterootProject.buildDir
}
2. File->New->Import Module
然后选择编译好的ijkplayer的目录下的android/ijkplayer目录,从中选择ijk-example,这个库会依赖该文件夹下的所有其他库,故其他库会自动选择,并全部导入,然后将android/ijkplayer目录下的tools文件夹也拷贝到自己项目的根目录下。
3. 在ijkplayer-java\src\main\目录下新建一个名为jniLibs的文件夹,将各个ijkplayer-xxx目录中的\src\main\libs目录下的文件夹拷贝到jniLibs文件夹中,如:ijkplayer--armv7a的该目录下包含armeabi-v7a这个文件夹,其中包含了该平台对应的.so文件,如下图所示
如果希望包含所有平台的,就将所有ijkplayer-xxx下的全部拷过来,如果只希望某几个平台的,就只拷贝它们的。
4. 将ijkplayer-xxx的目录全部从项目中删除掉,只保留ijkplayer-example、ijkplayer-java、ijkplayer-exo以及tools文件夹,其中ijkplayer-example依赖于后面几个。
5. 将ijkplayer-example修改为Module的形式,因为ijkplayer-example本身是一个application工程,默认不生成aar文件,且0.6.3的版本比较新,里面的资源互相依赖,难以像旧版本通过复制所需的几个java文件到自己工程中的方式来使用,所以不如将整个ijkplayer-example转换为我们工程的一个Module。具体方法是:
先修改ijkplayer-example目录下的build.gradle文件,如下:
applyplugin:'com.android.library'
android {
// http://tools.android.com/tech-docs/new-build-system/tips
//noinspection GroovyAssignabilityCheck
compileSdkVersionrootProject.ext.compileSdkVersion
//noinspection GroovyAssignabilityCheck
buildToolsVersionrootProject.ext.buildToolsVersion
lintOptions {
abortOnErrorfalse
}
defaultConfig {
//applicationId "tv.danmaku.ijk.media.example"
minSdkVersion9
targetSdkVersionrootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
}
buildTypes {
release {
minifyEnabledfalse
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
/*productFlavors {
all32 { minSdkVersion 9 }
all64 { minSdkVersion 21 }
// armv5 {}
// armv7a {}
// arm64 { minSdkVersion 21 }
// x86 {}
}*/
}
dependencies {
compile fileTree(include: ['*.jar'],dir:'libs')
compile'com.android.support:appcompat-v7:24.1.1'
compile'com.android.support:preference-v7:24.1.1'
compile'com.android.support:support-annotations:24.1.1'
compile'com.squareup:otto:1.3.8'
compile project(':ijkplayer-java')
compile project(':ijkplayer-exo')
/*all32Compile project(':ijkplayer-armv5')
all32Compile project(':ijkplayer-armv7a')
all32Compile project(':ijkplayer-x86')
all64Compile project(':ijkplayer-armv5')
all64Compile project(':ijkplayer-armv7a')
all64Compile project(':ijkplayer-arm64')
all64Compile project(':ijkplayer-x86')
all64Compile project(':ijkplayer-x86_64')*/
// compile 'tv.danmaku.ijk.media:ijkplayer-java:0.6.3'
// compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.6.3'
// all32Compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.6.3'
// all32Compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.6.3'
// all32Compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.6.3'
// all64Compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.6.3'
// all64Compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.6.3'
// all64Compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.6.3'
// all64Compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.6.3'
// all64Compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.6.3'
// armv5Compile project(':player-armv5')
// armv7aCompile project(':player-armv7a')
// arm64Compile project(':player-arm64')
// x86Compile project(':player-x86')
// x86_64Compile project(':player-x86_64')
}
注意:(1)apply plugin: 'com.android.application'要改为apply plugin: 'com.android.library'
(2)applicationId "tv.danmaku.ijk.media.example"这句要去掉
(3)productFlavors {
all32 { minSdkVersion 9 }
all64 { minSdkVersion 21 }
// armv5 {}
// armv7a {}
// arm64 { minSdkVersion 21 }
// x86 {}
}
这部分也要去掉。
(4)all32Compile project(':ijkplayer-armv5')
all32Compile project(':ijkplayer-armv7a')
all32Compile project(':ijkplayer-x86')
all64Compile project(':ijkplayer-armv5')
all64Compile project(':ijkplayer-armv7a')
all64Compile project(':ijkplayer-arm64')
all64Compile project(':ijkplayer-x86')
all64Compile project(':ijkplayer-x86_64')
这些也都去掉。
(5)compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.android.support:preference-v7:24.1.1'
compile 'com.android.support:support-annotations:24.1.1'
compile 'com.squareup:otto:1.3.8'
这几个修改为自己安装的版本。
6. 在ijkplayer-example根目录下增加一个gradle.properties文件,内容如下:
POM_NAME=ijkplayer-example
POM_ARTIFACT_ID=ijkplayer-example
POM_PACKAGING=aar
这里就能生成可供我们自己工程中调用的aar文件。
7. 在自己项目中添加依赖
File->Project Structure,在左边Module中选中自己的项目(app),点上方的Dependencies,然后点左边的“+”号选择3 Module dependency即可添加依赖的模块,如图所示:
8.ijkplayer的基本使用
这里调用ijkplayer-example中的IjkVideoView控件实现一个视频播放器,首先是播放器的xml文件,我的工程在Activity中包含了一个fragment,以下是fragment的xml文件:
<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="6dp">
<tv.danmaku.ijk.media.example.widget.media.IjkVideoView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/videoView">
</tv.danmaku.ijk.media.example.widget.media.IjkVideoView>
<TextView
android:id="@+id/toast_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@color/ijk_transparent_dark"
android:padding="16dp"
android:textSize="16sp"
android:visibility="gone"/>
<TableLayout
android:id="@+id/hud_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:background="@color/ijk_transparent_dark"
android:padding="8dp"/>
</LinearLayout>
以下在fragment的java代码:
packagenet.app.videotest;
importandroid.net.Uri;
importandroid.os.Bundle;
importandroid.support.v4.app.Fragment;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.TableLayout;
importandroid.widget.TextView;
importandroid.widget.Toast;
importtv.danmaku.ijk.media.example.application.Settings;
importtv.danmaku.ijk.media.example.widget.media.AndroidMediaController;
importtv.danmaku.ijk.media.example.widget.media.IjkVideoView;
importtv.danmaku.ijk.media.player.IjkMediaPlayer;
/**
* Created by knight on 2016/10/6.
*/
public classVideoFragmentextendsFragment {
privateIjkVideoViewmVideoView;
privateAndroidMediaControllermMediaController;
privateTextViewmTextView;
privateStringmVideoPath;
privateTextViewmToastTextView;
privateTableLayoutmHudView;
privateSettingsmSettings;
public staticVideoFragmentnewInstance() {
return newVideoFragment();
}
@Override
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
publicViewonCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_video,container, false);
mSettings=newSettings(getActivity());
mVideoPath= (String) getActivity().getIntent().getSerializableExtra(VideoActivity.EXTRA_VIDEO_PATH);
// init UI
mMediaController=newAndroidMediaController(getActivity(), false);
// init player
IjkMediaPlayer.loadLibrariesOnce(null);
IjkMediaPlayer.native_profileBegin("libijkplayer.so");
mVideoView= (IjkVideoView) v.findViewById(R.id.videoView);
mToastTextView= (TextView) v.findViewById(R.id.toast_text_view);
mHudView= (TableLayout) v.findViewById(R.id.hud_view);
mTextView= (TextView) v.findViewById(R.id.textView);
mVideoView.setMediaController(mMediaController);
mVideoView.setHudView(mHudView);
if(mVideoPath=="") {
Toast.makeText(
getActivity(),
"No Video Found! Press Back Button To Exit",
Toast.LENGTH_LONG).show();
}
else{
mVideoView.setVideoURI(Uri.parse(mVideoPath));
mVideoView.start();
}
returnv;
}
@Override
public voidonStop() {
super.onStop();
IjkMediaPlayer.native_profileEnd();
}
}
如果你的播放器是直接在Activity中实现的话,可以将上述xml文件作为你的播放器的Activity的xml,而上述java代码中在onCreateView中的实现放在Activity的onCreate中既可,别忘了View要用setContentView获取,mVideoPath则是你自己的视频源地址。
方法二:导入基本库并裁剪ijk-example使用
如果你想把自带的ijk-example中的代码中不需要的资源去掉,同时保留必须的,则先可以按照上述步骤操作,然后通过看源代码确定,哪些java源文件是依赖别的文件,而又不被别的文件依赖的,则将其删除掉,也可以一边删除一边尝试编译,出错的话,就再拷贝回来。
作者也是Android视频开发的初学者,文中内容还望各位高人批评指正。
Android Studio中如何将ijkplayer 0.6.3导入自己的项目中并使用相关推荐
- Android Studio 升级 gradle:3.6.0 报错:Entry name 'xxx-xxx.xml' collided
Android Studio 升级 gradle:3.6.0 报错:Entry name 'xxx-xxx.xml' collided 删除掉目录中所有的build文件夹,重新Sync编译
- Android Studio下载及安装3.0版本
今天,继续简单讲讲Android studio3.0如何安装. 之前写过Android studio的安装,那个是Android 2.2.3版本,这次由于导入3.0项目,所以重新安装了Android ...
- Android Studio配置GreenDAO 3.2.0和使用方法
我相信,在平时的开发过程中,大家一定会或多或少地接触到SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写SQL语句与解析查询结果等.所以,适用于Android ORM框架也就孕育而生了 ...
- android studio制作目录布局,Android Studio:新创建的目录未出现在文件夹Vi中
9个解决方案 136 votes 事实证明,顶部有一个选择器,默认设置为显示Android. 如果您将切换按钮向下拨到"包",您可以看到自己的包. Aggressor answer ...
- android studio教程离线安装findbugsieda报错,使用 FindBugs-IDEA 插件查找代码中潜在的 BUG...
在Android自动化测试技术中,我们首先会运用各种代码检查工具对Android代码进行检查,从而提前发现代码中存在的一些bug和隐患,提高代码质量.FindBug就是Android代码检查最常用的工 ...
- Android如何实现地图定位?Android studio+百度地图API+Android6.0系统实现地图显示、地址设置、点击地图定位功能(详细)
文章说明:本文初衷是为了记录毕设学习过程,避免忘记操作流程.该功能是毕业设计的Android软件端的功能之一,本文将从获取百度地图密钥(AK)开始,详细地对地图定位配置和相关代码进行说明,文末将附上实 ...
- 解决Android studio 的Glide 4.1.0第三方jar包如何导入libs目录
很多人在让自己的安卓实现导入外部的图片资源的时候遇到一系列的问题,今天就来好好解决 首先,相去github的官网下载这个jar包,下载任意一个即可,注意:你的网络可能会被墙,你可以换成手机的热点去下载 ...
- 华硕Tinker Board开发板(rk3288处理器)开发 ---- 将Android Studio开发的apk源码放到Android7.1.2源码中进行编译
备注:此Android Studio项目并没有jni,没有使用动态so库,只是一个简单的项目. 1.将Android studio开发的项目移植到Android7.1.2源码中,我们只需要Androi ...
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
2019独角兽企业重金招聘Python工程师标准>>> 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不 ...
最新文章
- Car-eye-http-flv-module 实现nginx-rtmp-mudule HTTP方式的FLV直播功能
- python xpath语法-Python爬虫——bs4、xpath基本语法
- python的mag模块_Python全栈-magedu-2018-笔记22
- 我的第一个可用的Windows驱动完成了
- hmacsha256是对称算法吗_HMAC-SHA256签名计算算法
- vue图片插入与设置夜间模式/动态过渡
- Hibernate组件作为Map索引(四)
- 7种炫酷HTML5 SVG液态水滴融合分解动画特效
- android短信和彩信探秘threads
- 夜来风雨声,“TCP/IP”知多少?
- Android 11.0 支持exfat格式
- html中调用广告居中,修改CSS让AdSense广告内容居中
- 在小公司天天人肉取数,真的会废了吗?
- 【转】股票时间序列数据处理与移动平均线
- mpt matlab,Simulink object和MPT object 区别
- 手柄映射键盘_“吃鸡”直接匹配“手搓”玩家?北通G2是一款非常好用的手柄...
- 隔板法详解(各种方法)(转载)
- 【Github】玩转Github系列之三——史上最全Github加速手段
- 百度发布国内首款AI输入法 进入全感官输入2.0时代
- 3D视觉识别案例:3D无序棒料抓取,阀体圆环上下料,电机定子上料
热门文章
- Leetcode -- Verify Preorder Serialization of a Binary Tree
- 撩小姐姐的小程序(二)----旋转3D八音盒
- 享受科技,抓住先“机”,苏宁手机蜜蜂节各大手机新品在等你
- 美国软件公司Salesforce获得区块链反垃圾邮件解决方案专利
- 自行车 forum.php,[你们城里人真会玩]关于大行折叠自行车18速..
- #前端开发我们应该具备的硬核技能
- 解释:什么是CPC,CPA,CVR,CTR,ROI? 营销、广告、淘宝 术语
- 谷粒商城笔记+踩坑(18)——购物车
- UE4制作插件的插件神器pluginCreator
- 用Windows自带的系统恢复环境WinRE进行系统重大故障排查,轻松修复Windows蓝屏、白屏等问题