官方文档:
建议直接参考官方文档操作,以下是我根据官方文档进行的操作,包括操作中遇到的一些问题。
基本流程:各种依赖包安装——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不好用了,只好另辟溪锦。
- 先自己下载一个SDK工具包,下载最新的就行,我这里实在找不下一个各种版本都有的下载战,只能自行百度了。
- 下载好后就是解压缩
unzip tools_r26.0.2-linux.zip- 添加环境变量,新建文件android.sh
nano /etc/profile.d/android.sh- 在编辑器中写入
export ANDROID_SDK=/path/to/android-sdk(这里写存放的路径)
export PATH=$
PATH:$
ANDROID_SDK/platform-tools:$
ANDROID_SDK/tools- 重新加载环境变量
source /etc/profile- 验证及更新
android update sdk –no-ui
如果找不到指令则安装失败,否则安装成功,但最后更新能否成功还是个未知数。
android ndk
- 基本与sdk相同,需要自己去网上寻觅下载。不过这里在版本的选择上需要花点功夫。因为在配置文件compile-libvlc中对版本要求有一定限制,这个就需要稍微研究一下shell语句,然后找出版本要求。
- 先自己下载一个NDK
- 下载好后就是解压缩
unzip android-ndk-r14b-linux-x86_64.zip - 添加环境变量,编辑文件android.sh
nano /etc/profile.d/android.sh - 在编辑器中写入
export ANDROID_NDK=/path/to/android-ndk(这里写存放的路径) - 重新加载环境变量
source /etc/profile - 验证
ndk-build
同样只要没有出现未找到命令既成功。
- 先自己下载一个NDK
protobuf
- 下载3.0以上版本
- 下载好后就是解压缩
tar -zxvf protobuf-cpp-3.1.0.tar.gz- 进入目录,执行
./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
可能的问题
- 首先编译的时间会很久,需要耐心的等待,中途会出现什么样的问题都不好说主要出现问题的可能有以下几点吧:
- 环境设置未完成,比如ndk版本不对,sdk不够新等
- 硬件要求不够,比如我用虚拟机做,中间先是硬盘空间占满,扩充后又出现内存不够用的情况
- 网络状况不好,下载失败
- 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了。