参照doc/readme.txt:https://github.com/schwabe/ics-openvpn/tree/master/doc
1 前期准备:
首先需要安装提到的:sdk, ndk, cmake (e.g. with Android studio), swig (3.0+)
Mac中swig的安装:
brew intall swig
swig下载源码安装参照:http://blog.csdn.net/epubcn/article/details/73296379
2 将项目clone到本地,并使用git下载子模块
将ics-openvpn从github上clone下来(很重要,如果不是clone的,就无法执行下面的下载子模块):
$ git clone https://github.com/schwabe/ics-openvpn.git
然后运行,下载子模块:
git submodule init
git submodule update
不要以为直接下载的时候就不用这两句话,后面cmake的时候,会报错,我直接下载的zip包,解压,是没有用的,最终还是先从githhub上clone下来ics-openvpn。
3 导入到Android Studio
3.1 修改build.gradle,其中的classpath修改为自己已经有的版本,当然网络好的可以自动更新的不用在意这个,我的环境classpath如下:
classpath 'com.android.tools.build:gradle:2.2.3'
3.2 修改gradle-wrapper.properties,理由同上,我的改为如下:
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
前两项改完以后,可以打开项目了,否则我的Android Studio会卡死。。。
3.3 按照报错,或者缺少的包,修改main/build.gradle中sdk的版本号和引用的库(dependencies{}),或者下载新的包,
注意:此处最好更新sdk,我在最后编译的时候发现项目用了现在比较新的Android8.0的API,所以sdkversion等最好与clone下来的相同,如果都相同,可以避免很多错误。
compileSdkVersion 23
buildToolsVersion '24.0.3'
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode = 156
versionName = "0.7.3"
externalNativeBuild {
cmake {
arguments '-DANDROID_TOOLCHAIN=clang',
'-DANDROID_STL=c++_static'
//abiFilters "arm64-v8a"
}
}
}
报错:
1 Failed to find CMake
参照:https://stackoverflow.com/questions/40766673/android-failed-to-find-cmake
从Sdk tool直接下载Cmake和lldb就可以
2 CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
具体报错如下:
CMake Error at /Users/ccc/Desktop/work/android/adt-bundle-mac-x86_64-20140702/android-sdk-macosx/cmake/3.6.4111459/android.toolchain.cmake:345 (message):
Missing file:
/Users/ccc/Desktop/work/android/adt-bundle-mac-x86_64-20140702/android-ndk-r8e/source.properties.
Please use NDK r12+.
Call Stack (most recent call first):
/Users/ccc/Desktop/work/android/adt-bundle-mac-x86_64-20140702/android-sdk-macosx/cmake/3.6.4111459/share/cmake-3.6/Modules/CMakeDetermineSystem.cmake:98 (include)
CMakeLists.txt
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
Error:executing external native build for cmake /Users/ccc/Downloads/aaaaaa/Vpn/ics-openvpn-master/main/src/main/cpp/CMakeLists.txt
Build command failed.
ndk版本太老了,需要换新的ndk,我的是ndkr8,现在使用Android Studio安装了 NDK r16,则没有再报这个错
3 子模块找不到
报错:
OpenVPN 2.x version HEAD-HASH-NOTFOUND
OpenVPN 3.x version HEAD-HASH-NOTFOUND
CMake Error at openssl.cmake:645 (message):
Unknown arch armeabi for source files
Call Stack (most recent call first):
CMakeLists.txt:19 (include)
Error:executing external native build for cmake /Users/ccc/Downloads/aaaaaa/Vpn/ics-openvpn-master/main/src/main/cpp/CMakeLists.txt
没有下载子模块,参照上面的git clone等一系列过程,开始下载子模块
4 报错显示某arm架构找不到
报错:
armeabi is deprecated and will be removed in a future NDK release.
解决方法:修改mainbuild.gradle,添加架构的过滤
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode = 156
versionName = "0.7.3"
externalNativeBuild {
cmake {
arguments '-DANDROID_TOOLCHAIN=clang',
'-DANDROID_STL=c++_static'
//abiFilters "arm64-v8a"
abiFilters 'arm64-v8a','armeabi-v7a','x86','x86_64'
}
}
}
5 某个values-it.xml报错,两个单引号没有加反斜杠
其实文件并不是改/ics-openvpn/main/build/intermediates/res/merged/noovpn3/debug/values-it就可以的,因为这是从其他地方复制过来的,需要改的文件为:某个string.xml,当时没找到,搜报错的内容存在的文件即可
6 appConfigure 在AndroidManifest.xml不识别
报错:
No resource identifier found for attribute'appCategory' in package 'android' manifest
解决方法:
修改/ics-openvpn/main/src/main路径下的AndroidManifest.xml即可,直接修改报错的AndroidManifest.xml是没有用的
7 报错 jack is required .... sourceCompatibility JavaVersion.VERSION_1_8.
原因:因为使用了Lambda表达式,需要jdk1.8,而且需要设置jack为enable
解决方法:参考:https://www.cnblogs.com/LT5505/p/5685242.html
在main/build.gradle中的android里面直接添加到下面:
defaultConfig {
jackOptions {
enabled true
}
}