VLC for Android

官方文档:

https://wiki.videolan.org/AndroidCompile/

  建议直接参考官方文档操作,以下是我根据官方文档进行的操作,包括操作中遇到的一些问题。
  基本流程:各种依赖包安装——Openjdk安装——Android SDK安装——Android NDK安装——protobuf3.0以上版本安装——开始编译——准备应对各种问题——签名——完成
  • 首先编译必须要在 linux 上进行,我这边用到的是 ubuntu16.04,所以之后的操作代码都是基于此系统的,不过需求都是相同的,只是包的安装方式不同。

注意:虚拟机的话要保证硬盘空间充足,至少留20G吧,鬼知道为什么这么占空间。

  • 安装必要的依赖包,编译过程中要用到这些应用的功能,所以是必不可少的,文档中需求的包好些系统已经自带,但不同系统可能会有差异,为保险起见还是从头装一遍,省得之后遇到问题浪费更多时间。(分开是为了看安装进度,是否安装成功)
自带的:
$sudo apt-get install automake m4  mawk gcc g++ pkg-config patch unzip flex
需安装:
$sudo apt-get install autoconf libtool  make gawk cmake ragel protobuf-compiler subversion curl wget 
文件较大,建议单独安装:
$sudo apt-get install ant
$sudo apt-get install git
$sudo apt-get install openjdk-8-jre openjdk-8-jdk

最后检查,也可以直接复制安装:
$ sudo apt-get install automake ant autopoint cmake build-essential libtool patch pkg-config protobuf-compiler ragel subversion unzip git openjdk-8-jre openjdk-8-jdk flex
android sdk
  • 上面完成之后就已经装好了依赖的功能包和JDK,接下来就是要安装SDK。SDK的话通过文档中的方法是需要翻墙的,由于近期VPN不好用了,只好另辟溪锦。
  1. 先自己下载一个SDK工具包,下载最新的就行,我这里实在找不下一个各种版本都有的下载战,只能自行百度了。
  2. 下载好后就是解压缩
    unzip tools_r26.0.2-linux.zip
  3. 添加环境变量,新建文件android.sh
    nano /etc/profile.d/android.sh
  4. 在编辑器中写入
    export ANDROID_SDK=/path/to/android-sdk(这里写存放的路径)
    export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools
  5. 重新加载环境变量
    source /etc/profile
  6. 验证及更新
    android update sdk –no-ui
    如果找不到指令则安装失败,否则安装成功,但最后更新能否成功还是个未知数。
android ndk
  • 基本与sdk相同,需要自己去网上寻觅下载。不过这里在版本的选择上需要花点功夫。因为在配置文件compile-libvlc中对版本要求有一定限制,这个就需要稍微研究一下shell语句,然后找出版本要求。
    1. 先自己下载一个NDK
    2. 下载好后就是解压缩
      unzip android-ndk-r14b-linux-x86_64.zip
    3. 添加环境变量,编辑文件android.sh
      nano /etc/profile.d/android.sh
    4. 在编辑器中写入
      export ANDROID_NDK=/path/to/android-ndk(这里写存放的路径)
    5. 重新加载环境变量
      source /etc/profile
    6. 验证
      ndk-build
      同样只要没有出现未找到命令既成功。

protobuf
  1. 下载3.0以上版本
  2. 下载好后就是解压缩
    tar -zxvf protobuf-cpp-3.1.0.tar.gz
  3. 进入目录,执行
    ./configure
    make
    sudo make instrall
开始编译
debug版: - 进入到vlc-android目录下
$sh compile.sh -a <ABI>
  • 漫长的等待和大量的问题
  • 成功的话可以创建debug版

release版

sh compile.sh release
  • 漫长的等待,这里就不会遇到太多问题了
  • 成功的话可以创建release版
  • 都存放在vlc-android/build/outputs/apk folder/目录中

libvlc

 sh compile.sh -l -a <ABI> -r
  • 执行后编译生成动态库文件
  • 存放在libvlc/build/outputs/aar/

以下是ABI对应的设备列表,一般都用armeabi-v7a,填入上面的指令替换<ABI>
Find the ABI for the target device.

For a normal (2012-2015 consumer phone or tablet) device (e.g. Cortex-A8 or Cortex-A9)

armeabi-v7a

For a Tegra2 device (no NEON)

armeabi-v7a

For an ARMv6 device

armeabi

For an ARMv6 device that does not support FPU

armeabi-nofpu

For an ARMv5 device or the Android Emulator

armeabi-v5

For a x86 device (e.g. Android-x86, Google TV, Logitech TV, Android x86 smartphones, etc)

x86

For a MIPS device (i.e. Ainol Novo tablets):

mips

This value must be passed to the compile.sh script

可能的问题
  • 首先编译的时间会很久,需要耐心的等待,中途会出现什么样的问题都不好说主要出现问题的可能有以下几点吧:
  1. 环境设置未完成,比如ndk版本不对,sdk不够新等
  2. 硬件要求不够,比如我用虚拟机做,中间先是硬盘空间占满,扩充后又出现内存不够用的情况
  3. 网络状况不好,下载失败
  4. gradle的安装问题

这里着重介绍下gradle的问题,其他问题遇到了就仔细看错误提示,一般都不难解决,但可能会非常多。而gradle就麻烦点了。
编译后脚本是会自动下载所需的gradle包然后解压,完成后可以在vlc-android中看到gradle-4.1-bin.zip压缩包。但是你会发现解压之后它又一次下载这个压缩包,而且一直下载不好,这时候就需要手动处理一下了。
将下载好的包拷贝到家目录下的隐藏文件夹./gradle(即~/.gradle)
将该包放置于类似这样的路径:

~/.gradle/wrapper/dists/gradle-4.1-bin/64bhckfm0iuu9gap9hg3r7ev2/gradle-4.1-bin.zip

总之狂敲Tab就能找到,把压缩包复制进来。

重新运行脚本即可。注意,如果此时存在/vlc-android/gradle/wrapper路径,需要删除,脚本才能进入gradle的安装步骤。

正确安装gradle后会输出gradle的版本信息表明安装成功。之后脚本会将/vlc-android/gradle-3.3/gradle/wrapper/文件夹移动到/vlc-android/gradle/wrapper/,并以该文件夹是否存在,作为是否进行gradle安装的判断条件。(因此,使用上述本地gradle-3.3-bin.zip安装前需要删除该文件夹让脚本进入安装流程)。

签名

签名的意义
  为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。

apk文件签名主要分为三个步骤,证书的创建–>签名生成–>优化(可选)

前提是已经安装jdk并且已经添加到环境变量中。
证书的创建

keytool -genkey -v -alias KeyName -keyalg RSA -keysize 2048 -validity 10000

这行命令中一些重要的参数值说明如下:

KeyName:表示证书的别名(自己起个名字)

10000: 表示证书的有效期,单位(天)

RSA:证书的加密类型,一般默认为RSA

其次在创建的过程中要填写一些基本的信息,证书密码等相关的信息。

证书生成后的查看

keytool -list -alias KeyName

对APK进行签名

jarsigner -verbose sign_apk_file.apk KeyName

参数解释:

sign_apk_file.apk 需要签名的apk文件(绝对路径)

KeyName 证书的别名

待签名的apk文件根根目录下如果有文件夹“META-INFO”,请先删除(重新签名就需要这样做)。
如果不想创建过程输出太多信息,可以删除“-verbose” 。
上述签名会直接覆盖原来的文件,如果不想被覆盖而签名为另外的新文件 signed.akp,

只需将 signed.apk 改为 -signedjar signed.apk sign_old.akp 即可。

签名后可以使用如下命令验证是否签名成功:

jarsigner -verify signed.apk

如果需要查看更详细的验证信息,可修改为:

jarsigner -certs -verbose -verify signed.apk

使用android sdk的zipalign工具优化已签名的apk文件

zipalign -v 4 unaligned.apk aligned.apk

注意要在签名后再zipalign。这个工具不是jdk自带的,而是在%ANDROID_HOME%\tools\zipalign

完成

把apk拿去运行就ok了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值