Step 7:清除一波
cd android/contrib ./compile-openssl.sh clean ./compile-ffmpeg.sh clean
Step 8:编译openssl
./compile-openssl.sh all
Step 9:编译ffmpeg
这里的话看你需要,如果想编译所有版本的so库,就跟all,如果是特定 CPU架构就跟cpu架构,比如:./compile-ffmpeg.sh armv7a编译特定需要的肯定是比全部耗时短~
./compile-ffmpeg.sh all
Step 10:编译ijkplayer
加all默认编译所有架构的so库,不加默认只编译armv7a架构!
./compile-ijk.sh all
编译需要漫长的等待,编译成功后,会在目录下生成一个ijkplayer的工程:
到此,编译一个支持HTTPS的ijkplayer就完成了,接着是怎么用这个东西啦:
再吐槽一句:网上很多教编译的,到此就完了,完全不跟别人说怎么用, 我一开始以为只要把so库放到自己项目的libs下就可以了,结果各种编译 报错,我真服了,大佬们写文章别虎头蛇尾啊!!!
最简单的使用方法,就是把这个项目当成一个library导入到项目中, 就是build.gradle里多一个compile project(':ijkplayer'), 然后你就可以用了,记得把你之前写的:
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.4' compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.4'
这些依赖删掉,不然还是会报不支持HTTPS的! 一般到这里引用到项目里就够了,但是小猪不是个容易满足的人! 所以有了下面的折腾!
3.删减无关东西,生成aar依赖库
觉得又很多无关的东西,说下小猪的期望吧:
- 1.只是用来播放音乐(exo和example部分可以去掉);
- 2.只需要armv7a架构的(删除其他架构,并把armv7a的so库放到ijkplayer-java);
- 3.最后只保留一个ijkplayer-java,导出成ijkplayer.aar文件供自己的项目使用;
接着一步步来把实现小猪的期望吧:
Step 1
:右键项目 Open Module Settings,点击减号把除了ijkplayer-example 和ijkplayer-java的依赖都删除:
接着打开ijkplayer-java/src/main/,新建一个libs文件夹, 同时打开ijkplayer-armv7a/main/libs,把里面的armeabi-v7a文件 夹整个拷到ijkplayer-java的libs文件夹下。
然后可以把除了ijkplayer-example和ijkplayer-java的其他都删掉了, 接着修改下ijkplayer-java的build.gradle文件,删掉最后一句,以及 修改下版本信息。
接着编译一波整个工程,运行下,点开simple,随便点首歌看看能否播放, 如果可以正常播放,那么就进入下一步了,导出aar库。
Step 2:编译aar库
这个倒是简单,点击右侧gradle,依次打开,右键run就好
执行完毕,会在build/outputs/aar目录下生成aar文件。
Step 3:把aar文件添加到项目中
这个也很简单,直接丢到app的libs文件夹下,然后build.gradle下添加依赖,(笔者直接把ijkplayer-java-release.aar改名成 ijkplayer.aar)
implementation(name: 'ijkplayer', ext: 'aar')
接着,项目里写个简单的播放音乐的代码试试水,按钮点击播放一个音乐:
public class MusicPlayActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_music_play); Button btn = findViewById(R.id.button); btn.setOnClickListener(v -> { IjkMediaPlayer player = new IjkMediaPlayer(); player.setAudioStreamType(AudioManager.STREAM_MUSIC); player.setScreenOnWhilePlaying(true); player.setOnPreparedListener(IMediaPlayer::start); try { player.setDataSource("https:xxxx.mp3"); player.prepareAsync(); } catch (IOException e) { e.printStackTrace(); } }); } }
如果播放正常的话,说明我们的移植非常成功,如果你没有用模块化, 到此就可以结束了,如果你像我一样用了模块化,而且还把音频播放 独立成了一个模块,app -> 音频播放模块 -> ijkplayer.aar, 恭喜你,编译直接报错,找不到aar,2333!解决方法的话,你要 接着看下面的啦~
4.模块化,模块使用aar找不到问题解决
需要修改三个build.gradle文件,依次是音频播放模块,app,以及application层级
音频播放模块的build.gradle:
app层级的build.gradle:
application层级的build.gradle
接着build一波项目,就可以啦~
小结
耗时几天,总算是编译成功,而且收获颇多了,也懂了了一个道理: 人难免有畏难情绪,对于学习新的东西总会下意识的抗拒,觉得难, 但是大部分时候只是看上去难,当你去学了,并坚持一段时间,你 会发现,其实并没有你想象中那么难~
最后附上缩减后的ijk-player和aar包,有需要的自取:github.com/coder-pig/i…