ics-openvpn编译过程

参照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
        }
    }




猜你喜欢

转载自blog.csdn.net/lllkey/article/details/79555648
今日推荐