Shadowscks-android how to Cross compilation go program?


#1

I want to build shadowsocks-android on windows 10 system. When i install the apk on phone.it put a problem about jniHelper.I think the program missed some Binary file.So i read the make.bat and i find it is not worked. I alter this file but some code i can’t understand.

@ECHO OFF
SETLOCAL

IF NOT DEFINED ANDROID_NDK_HOME (
SET ANDROID_NDK_HOME=%ANDROID_HOME%\ndk-bundle
)

SET DIR=%~dp0
SET MIN_API=%1%
SET TARGET=%DIR%bin
SET DEPS=%DIR%.deps

SET ANDROID_ARM_TOOLCHAIN=%DEPS%\android-toolchain-%MIN_API%-arm
SET ANDROID_ARM64_TOOLCHAIN=%DEPS%\android-toolchain-%MIN_API%-arm64
SET ANDROID_X86_TOOLCHAIN=%DEPS%\android-toolchain-%MIN_API%-x86

SET ANDROID_ARM_CC=%ANDROID_ARM_TOOLCHAIN%\bin\arm-linux-androideabi-clang
SET ANDROID_ARM_STRIP=%ANDROID_ARM_TOOLCHAIN%\bin\arm-linux-androideabi-strip

SET ANDROID_ARM64_CC=%ANDROID_ARM64_TOOLCHAIN%\bin\aarch64-linux-android-clang
SET ANDROID_ARM64_STRIP=%ANDROID_ARM64_TOOLCHAIN%\bin\aarch64-linux-android-strip

SET ANDROID_X86_CC=%ANDROID_X86_TOOLCHAIN%\bin\i686-linux-android-clang
SET ANDROID_X86_STRIP=%ANDROID_X86_TOOLCHAIN%\bin\i686-linux-android-strip

MKDIR %DEPS%>nul 2>nul
MKDIR %TARGET%\armeabi-v7a>nul 2>nul
MKDIR %TARGET%\x86>nul 2>nul
MKDIR %TARGET%\arm64-v8a>nul 2>nul

SET CC=%ANDROID_ARM_TOOLCHAIN%\bin\arm-linux-androideabi-gcc.cmd
IF NOT EXIST %ANDROID_ARM_CC% (
ECHO “Make standalone toolchain for ARM arch”
python.exe %ANDROID_NDK_HOME%\build\tools\make_standalone_toolchain.py --arch arm --api %MIN_API% --install-dir %ANDROID_ARM_TOOLCHAIN%
)

IF NOT EXIST %ANDROID_ARM64_CC% (
ECHO “Make standalone toolchain for ARM64 arch”
python.exe %ANDROID_NDK_HOME%\build\tools\make_standalone_toolchain.py --arch arm64 --api %MIN_API% --install-dir %ANDROID_ARM64_TOOLCHAIN%
)

IF NOT EXIST %ANDROID_X86_CC% (
ECHO “Make standalone toolchain for X86 arch”
python.exe %ANDROID_NDK_HOME%\build\tools\make_standalone_toolchain.py --arch x86 --api %MIN_API% --install-dir %ANDROID_X86_TOOLCHAIN%
)

REM Check environment availability
IF NOT EXIST %CC% (
ECHO “gcc not found”
EXIT 1
)

WHERE python.exe
IF “%ERRORLEVEL%” == 1 (
ECHO “python not found”
EXIT 1
)

WHERE go.exe
IF “%ERRORLEVEL%” == 1 (
ECHO “python not found”
EXIT 1
)

rem IF NOT EXIST %DIR%\go\bin\go.exe (
rem ECHO “Build the custom go”

rem PUSHD %DIR%\go\src
rem CALL make.bat
rem POPD
rem )

SET BUILD=1
IF EXIST “%TARGET%\armeabi-v7a\liboverture.so” (
IF EXIST “%TARGET%\arm64-v8a\liboverture.so” (
IF EXIST “%TARGET%\x86\liboverture.so” (
SET BUILD=0
)
)
)

IF %BUILD% == 1 (
ECHO “Get dependences for overture”
go.exe get -u github.com\tools\godep

PUSHD %DIR%\src\github.com\shadowsocks\overture\main
godep.exe restore

ECHO "Cross compile overture for arm"
IF NOT EXIST "%TARGET%\armeabi-v7a\liboverture.so" (
	SETLOCAL
    SET CGO_ENABLED=1
    SET CC=%ANDROID_ARM_CC%
    SET GOOS=android
    SET GOARCH=arm
    SET GOARM=7	 	      
    go.exe build -ldflags="-s -w" 	    
    %ANDROID_ARM_STRIP% main
    MOVE main %TARGET%\armeabi-v7a\liboverture.so>nul 2>nul 
    ENDLOCAL
)

ECHO "Cross compile overture for arm64"
IF NOT EXIST "%TARGET%\arm64-v8a\liboverture.so" (
	SETLOCAL
    SET CGO_ENABLED=1
    SET CC=%ANDROID_ARM64_CC%
    SET GOOS=android
    SET GOARCH=arm64
    go.exe build -ldflags="-s -w" 
    %ANDROID_ARM64_STRIP% main
    rem MOVE main %TARGET%\arm64-v8a\liboverture.so>nul 2>nul 
    ENDLOCAL
)

ECHO "Cross compile overture for x86"
IF NOT EXIST "%TARGET%\x86\liboverture.so" (
	SETLOCAL
    SET CGO_ENABLED=1
    SET CC=%ANDROID_X86_CC%
    SET GOOS=android
    SET GOARCH=386
    go.exe build -ldflags="-s -w"
    %ANDROID_X86_STRIP% main
    rem MOVE main %TARGET%\x86\liboverture.so>nul 2>nul 
    ENDLOCAL
)

POPD

)

ECHO “Successfully build overture”
ENDLOCAL

about this code :
IF NOT EXIST “%TARGET%\armeabi-v7a\liboverture.so” (
SETLOCAL
SET CGO_ENABLED=1
SET CC=%ANDROID_ARM_CC%
SET GOOS=android
SET GOARCH=arm
SET GOARM=7
go.exe build -ldflags="-s -w"
%ANDROID_ARM_STRIP% main
MOVE main %TARGET%\armeabi-v7a\liboverture.so>nul 2>nul
ENDLOCAL
)
Why not generate .so file.
Hope someone can help me .
thanks


#2

经过不断的尝试,该问题已经解决了。现在在win10系统上已经编译成功。


#3

你好,我最近也遇到导入shadowsock遇到问题,能不能加你个联系方式指导一下


#4

兄弟,您好,能不能分享下您是如何在win下编译成功的。


#5

最近比较忙没有查看这个问题,我们该怎么联系呢?


#6

等过段时间,有点空闲了我也许会整理下,如果你还没有编译成功,或许可以留下问题。


#7

你好 ,弄了好久还是没有在 win10 上编译成功, 能指导下吗, qq号码:897268140


#8

1、检查你的文件是否git全了,github上的项目引用很多其它的依赖库,需要使用作者提供的命令下载。
2、有几个库使用的是google的包,你需要给git设置代理。
3、项目下载下来后与github上的项目对比下,主要是core目录jni文件是否是齐全的。
4、如果文件齐全,disable instant run 之后报的错误应该是 value 1这样的,造成的原因是overture下的make.bat文件中存在错误。
5、需要暗转go python并且配置环境变量,可以修改bat文件,直接点击调式该文件,根据错误一步步修改该文件。
6、主要注意arm-linux-androideabi-clang.cmd python.exe 需要添加文件后缀否则bat不识别。
7、bat文件执行成功后会在对应的文件夹中生成对应的.so文件。
8.使用android studio rebulid项目就能成功了。


#10

需要暗转go python并且配置环境变量,可以修改bat文件,直接点击调式该文件,根据错误一步步修改该文件。。
暗转 是什么意思,怎么操作


#11

主要 还遇到了 Error while executing process D:\kaifa\Sdk\ndk-bundle\ndk-build.cmd with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=C:\Users\Dell\shadowsocks-android\core\src\main\jni\Android.mk NDK_APPLICATION_MK=C:\Users\Dell\shadowsocks-android\core\src\main\jni\Application.mk APP_ABI=arm64-v8a NDK_ALL_ABIS=arm64-v8a NDK_DEBUG=1 APP_PLATFORM=android-21 NDK_OUT=C:/Users/Dell/shadowsocks-android/core/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=C:\Users\Dell\shadowsocks-android\core\build\intermediates\ndkBuild\debug\lib -j8 APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n}


#12

抱歉是打错字了 是安装,那个.bat文件中用到了go和python其编译一些文件 所以需要安装这两个


#13

这个问题是你的文件没有git clone全,可能是文件被墙了


#14

刚刚用 gradle clean 和 gradle assembleRelease 命令 发现又下载了好东西,不过最终还是报错 图片中的错误[quote=“oreuuz, post:13, topic:186, full:true”]
这个问题是你的文件没有git clone全,可能是文件被墙了
[/quote]


#15

跑到这一步来了,没有成功,老哥你是我精神寄托啊,一步一步的,哈哈哈哈


#16

这个截图的错误是 .bat文件错误了 你的依赖已经下载全了,只要调试通bat文件基本就成功了,你的QQ似乎需要回答问题,我不知道答案。


#17


又安装了好多东西, 还下载了 gcc 到这一步了,应该算是bat 成功了吗 ,可是还是报错 。
qq现在可以加了,难怪这些年没人加我 ,原来有问题, 遗憾