使用 Android NDK 編譯 Lua

啟動 Android Studio ,創(chuàng)建一個(gè) Android 項(xiàng)目,勾選 C++ Support。

一路 Next 到這里,直接 Finish,不用勾選保持默認(rèn)即可。

如果之前沒有安裝 NDK 和 Cmake 工具,到這里會提示安裝 NDK 等工具,直接安裝,我這里之前已經(jīng)安裝了,所以略過。

等待工程就緒之后,正常構(gòu)建一次,看 Hello World 能不能正常構(gòu)建運(yùn)行起來。查看編譯后的 APK 文件,看看里面是否有下列目錄和 .so 文件。

Executing tasks: [:app:assembleDebug]
省略一堆Log
External native generate JSON debug: JSON generation completed without problems
:app:externalNativeBuildDebug
Build native-lib x86_64
[1/2] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o
[2/2] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\x86_64\libnative-lib.so
Build native-lib x86
[1/2] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o
[2/2] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\x86\libnative-lib.so
Build native-lib arm64-v8a
[1/2] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o
[2/2] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\arm64-v8a\libnative-lib.so
Build native-lib armeabi-v7a
[1/2] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o
[2/2] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\armeabi-v7a\libnative-lib.so
:app:compileDebugSources
:app:mergeDebugShaders
:app:compileDebugShaders
:app:generateDebugAssets
:app:mergeDebugAssets
:app:transformClassesWithDexBuilderForDebug
:app:transformDexArchiveWithExternalLibsDexMergerForDebug
:app:transformDexArchiveWithDexMergerForDebug
:app:mergeDebugJniLibFolders
:app:transformNativeLibsWithMergeJniLibsForDebug
:app:transformNativeLibsWithStripDebugSymbolForDebug
:app:processDebugJavaRes NO-SOURCE
:app:transformResourcesWithMergeJavaResForDebug
:app:validateSigningDebug
:app:packageDebug
:app:assembleDebug

BUILD SUCCESSFUL in 12s
29 actionable tasks: 16 executed, 13 up-to-date

通過 7-Zip 可以查看 APK 里面的文件組成結(jié)構(gòu),如下是 lib 目錄下的內(nèi)容,分別對應(yīng)不同的 CPU 架構(gòu)。

如果能到這一步,說明至少 Android Studio 配置基本是 OK 的,NDK 能正常工作。

在 Android Studio 3.1 后,Gradle Console 就不見了,要查看構(gòu)建過程和步驟,在 Build 窗口點(diǎn)擊 Toggle View 就可以查看構(gòu)建步驟了。

在 Project 面板中,CPP 目錄下的文件就是 C/CPP 的源文件目錄,我們從 Lua 官網(wǎng)下載源碼后,將 .c 和 .h 文件當(dāng)?shù)肋@個(gè)目錄下面。

目前我能下載到最新的 Lua 版本是 5.3.5 ,粘貼到 CPP 目錄后,文件并不會顯示,不知道這是不是 Android Studio 的 bug,接下來修改 CMakeLists.txt 里面的內(nèi)容,將源代碼增加到構(gòu)建列表。

add_library( # Sets the name of the library.
             luajit

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/lapi.c
             src/main/cpp/lauxlib.c
             src/main/cpp/lbaselib.c
             src/main/cpp/lbitlib.c
             src/main/cpp/lcode.c
             src/main/cpp/lcorolib.c
             src/main/cpp/lctype.c
             src/main/cpp/ldblib.c
             src/main/cpp/ldebug.c
             src/main/cpp/ldo.c
             src/main/cpp/ldump.c
             src/main/cpp/lfunc.c
             src/main/cpp/lgc.c
             src/main/cpp/linit.c
             src/main/cpp/liolib.c
             src/main/cpp/llex.c
             src/main/cpp/lmathlib.c
             src/main/cpp/lmem.c
             src/main/cpp/loadlib.c
             src/main/cpp/lobject.c
             src/main/cpp/lopcodes.c
             src/main/cpp/loslib.c
             src/main/cpp/lparser.c
             src/main/cpp/lstate.c
             src/main/cpp/lstate.h
             src/main/cpp/lstring.c
             src/main/cpp/lstrlib.c
             src/main/cpp/ltable.c
             src/main/cpp/ltablib.c
             src/main/cpp/ltm.c
             src/main/cpp/lua.c
             src/main/cpp/lua.hpp
             src/main/cpp/lundump.c
             src/main/cpp/lutf8lib.c
             src/main/cpp/lvm.c
             src/main/cpp/lzio.c)

執(zhí)行編譯,這個(gè)時(shí)候 Build 窗口可能會出現(xiàn)一片紅 ...

具體錯(cuò)誤內(nèi)容如下:

Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
  Error while executing process D:\ANDROID\Sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build D:\ANDROID_PROJECTS\HelloLua2\app\.externalNativeBuild\cmake\debug\x86_64 --target luajit}
  [1/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcode.c.o
  [2/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcorolib.c.o
  [3/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lauxlib.c.o
  [4/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbitlib.c.o
  [5/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lapi.c.o
  [6/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbaselib.c.o
  [7/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/loadlib.c.o
  [8/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldo.c.o
  [9/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lgc.c.o
  [10/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldump.c.o
  [11/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmathlib.c.o
  [12/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/liolib.c.o
  [13/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lctype.c.o
  [14/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldebug.c.o
  [15/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/linit.c.o
  [16/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldblib.c.o
  [17/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/llex.c.o
  [18/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lfunc.c.o
  [19/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmem.c.o
  [20/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lobject.c.o
  [21/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltm.c.o
  [22/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lopcodes.c.o
  [23/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstate.c.o
  [24/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstrlib.c.o
  [25/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltablib.c.o
  [26/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lparser.c.o
  [27/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lua.c.o
  [28/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/luac.c.o
  [29/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstring.c.o
  [30/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lundump.c.o
  [31/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lutf8lib.c.o
  [32/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lvm.c.o
  [33/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltable.c.o
  [34/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/loslib.c.o
  [35/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lzio.c.o
  D:\ANDROID_PROJECTS\HelloLua2\app\src\main\cpp\loslib.c:169:3: warning: 'tmpnam' is deprecated: tempnam is unsafe, use mkstemp or tmpfile instead [-Wdeprecated-declarations]
    lua_tmpnam(buff, err);
    ^
  D:\ANDROID_PROJECTS\HelloLua2\app\src\main\cpp\loslib.c:131:33: note: expanded from macro 'lua_tmpnam'
  #define lua_tmpnam(b,e)         { e = (tmpnam(b) == NULL); }
                                         ^
  D:/ANDROID/Sdk/ndk-bundle/sysroot/usr/include\stdio.h:167:5: note: 'tmpnam' has been explicitly marked deprecated here
      __warnattr("tempnam is unsafe, use mkstemp or tmpfile instead");
      ^
  D:/ANDROID/Sdk/ndk-bundle/sysroot/usr/include\sys/cdefs.h:160:40: note: expanded from macro '__warnattr'
  #define __warnattr(msg) __attribute__((deprecated(msg)))
                                         ^
  1 warning generated.
  [36/36] Linking C shared library ..\..\..\..\build\intermediates\cmake\debug\obj\x86_64\libluajit.so
  FAILED: cmd.exe /C "cd . && D:\ANDROID\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang.exe  --target=x86_64-none-linux-android21 --gcc-toolchain=D:/ANDROID/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/windows-x86_64 --sysroot=D:/ANDROID/Sdk/ndk-bundle/sysroot -fPIC -isystem D:/ANDROID/Sdk/ndk-bundle/sysroot/usr/include/x86_64-linux-android -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security  -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++ --sysroot D:/ANDROID/Sdk/ndk-bundle/platforms/android-21/arch-x86_64 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -LD:/ANDROID/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86_64 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libluajit.so -o ..\..\..\..\build\intermediates\cmake\debug\obj\x86_64\libluajit.so CMakeFiles/luajit.dir/src/main/cpp/lapi.c.o CMakeFiles/luajit.dir/src/main/cpp/lauxlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lbaselib.c.o CMakeFiles/luajit.dir/src/main/cpp/lbitlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lcode.c.o CMakeFiles/luajit.dir/src/main/cpp/lcorolib.c.o CMakeFiles/luajit.dir/src/main/cpp/lctype.c.o CMakeFiles/luajit.dir/src/main/cpp/ldblib.c.o CMakeFiles/luajit.dir/src/main/cpp/ldebug.c.o CMakeFiles/luajit.dir/src/main/cpp/ldo.c.o CMakeFiles/luajit.dir/src/main/cpp/ldump.c.o CMakeFiles/luajit.dir/src/main/cpp/lfunc.c.o CMakeFiles/luajit.dir/src/main/cpp/lgc.c.o CMakeFiles/luajit.dir/src/main/cpp/linit.c.o CMakeFiles/luajit.dir/src/main/cpp/liolib.c.o CMakeFiles/luajit.dir/src/main/cpp/llex.c.o CMakeFiles/luajit.dir/src/main/cpp/lmathlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lmem.c.o CMakeFiles/luajit.dir/src/main/cpp/loadlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lobject.c.o CMakeFiles/luajit.dir/src/main/cpp/lopcodes.c.o CMakeFiles/luajit.dir/src/main/cpp/loslib.c.o CMakeFiles/luajit.dir/src/main/cpp/lparser.c.o CMakeFiles/luajit.dir/src/main/cpp/lstate.c.o CMakeFiles/luajit.dir/src/main/cpp/lstring.c.o CMakeFiles/luajit.dir/src/main/cpp/lstrlib.c.o CMakeFiles/luajit.dir/src/main/cpp/ltable.c.o CMakeFiles/luajit.dir/src/main/cpp/ltablib.c.o CMakeFiles/luajit.dir/src/main/cpp/ltm.c.o CMakeFiles/luajit.dir/src/main/cpp/lua.c.o CMakeFiles/luajit.dir/src/main/cpp/luac.c.o CMakeFiles/luajit.dir/src/main/cpp/lundump.c.o CMakeFiles/luajit.dir/src/main/cpp/lutf8lib.c.o CMakeFiles/luajit.dir/src/main/cpp/lvm.c.o CMakeFiles/luajit.dir/src/main/cpp/lzio.c.o  -llog -latomic -lm && cd ."
  D:/ANDROID/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/windows-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin\ld: error: CMakeFiles/luajit.dir/src/main/cpp/luac.c.o: multiple definition of 'main'
  D:/ANDROID/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/windows-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin\ld: CMakeFiles/luajit.dir/src/main/cpp/lua.c.o: previous definition here
  clang.exe: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 9s
21 actionable tasks: 18 executed, 3 up-to-date

提示中說的也比較清楚,我們使用了已經(jīng)廢棄了的函數(shù):warning: 'tmpnam' is deprecated: tempnam is unsafe, use mkstemp or tmpfile instead,但是項(xiàng)目中,使用這個(gè) tmpnam 的比較多,而且需要改 Lua 源代碼,本著不對 Lua 改動的原則,我們在 CMakeLists.txt 中增加下面的一行代碼,屏蔽廢棄函數(shù)的錯(cuò)誤警告。

add_definitions(-Wno-deprecated)

最終,文件結(jié)構(gòu)如下:

繼續(xù)編譯,發(fā)現(xiàn)依然編譯不通過,Build 窗口依然一片紅,如下:

Executing tasks: [clean, :app:assembleDebug]
省略一堆Log
* What went wrong:
Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
  Error while executing process D:\ANDROID\Sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build D:\ANDROID_PROJECTS\HelloLua2\app\.externalNativeBuild\cmake\debug\x86_64 --target luajit}
  Recompacting log...
  [1/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcorolib.c.o
  [2/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lapi.c.o
  [3/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbaselib.c.o
  [4/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbitlib.c.o
  [5/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcode.c.o
  [6/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lauxlib.c.o
  [7/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldebug.c.o
  [8/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lfunc.c.o
  [9/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/linit.c.o
  [10/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/liolib.c.o
  [11/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lctype.c.o
  [12/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lgc.c.o
  [13/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/llex.c.o
  [14/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldblib.c.o
  [15/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldo.c.o
  [16/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmem.c.o
  [17/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/loadlib.c.o
  [18/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmathlib.c.o
  [19/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldump.c.o
  [20/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lobject.c.o
  [21/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstrlib.c.o
  [22/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/loslib.c.o
  [23/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lopcodes.c.o
  [24/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltable.c.o
  [25/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lua.c.o
  [26/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lundump.c.o
  [27/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lparser.c.o
  [28/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstring.c.o
  [29/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltablib.c.o
  [30/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltm.c.o
  [31/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstate.c.o
  [32/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lutf8lib.c.o
  [33/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lvm.c.o
  [34/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/luac.c.o
  [35/36] Building C object CMakeFiles/luajit.dir/src/main/cpp/lzio.c.o
  [36/36] Linking C shared library ..\..\..\..\build\intermediates\cmake\debug\obj\x86_64\libluajit.so
  FAILED: cmd.exe /C "cd . && D:\ANDROID\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang.exe  --target=x86_64-none-linux-android21 --gcc-toolchain=D:/ANDROID/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/windows-x86_64 --sysroot=D:/ANDROID/Sdk/ndk-bundle/sysroot -fPIC -isystem D:/ANDROID/Sdk/ndk-bundle/sysroot/usr/include/x86_64-linux-android -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security  -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++ --sysroot D:/ANDROID/Sdk/ndk-bundle/platforms/android-21/arch-x86_64 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -LD:/ANDROID/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86_64 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libluajit.so -o ..\..\..\..\build\intermediates\cmake\debug\obj\x86_64\libluajit.so CMakeFiles/luajit.dir/src/main/cpp/lapi.c.o CMakeFiles/luajit.dir/src/main/cpp/lauxlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lbaselib.c.o CMakeFiles/luajit.dir/src/main/cpp/lbitlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lcode.c.o CMakeFiles/luajit.dir/src/main/cpp/lcorolib.c.o CMakeFiles/luajit.dir/src/main/cpp/lctype.c.o CMakeFiles/luajit.dir/src/main/cpp/ldblib.c.o CMakeFiles/luajit.dir/src/main/cpp/ldebug.c.o CMakeFiles/luajit.dir/src/main/cpp/ldo.c.o CMakeFiles/luajit.dir/src/main/cpp/ldump.c.o CMakeFiles/luajit.dir/src/main/cpp/lfunc.c.o CMakeFiles/luajit.dir/src/main/cpp/lgc.c.o CMakeFiles/luajit.dir/src/main/cpp/linit.c.o CMakeFiles/luajit.dir/src/main/cpp/liolib.c.o CMakeFiles/luajit.dir/src/main/cpp/llex.c.o CMakeFiles/luajit.dir/src/main/cpp/lmathlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lmem.c.o CMakeFiles/luajit.dir/src/main/cpp/loadlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lobject.c.o CMakeFiles/luajit.dir/src/main/cpp/lopcodes.c.o CMakeFiles/luajit.dir/src/main/cpp/loslib.c.o CMakeFiles/luajit.dir/src/main/cpp/lparser.c.o CMakeFiles/luajit.dir/src/main/cpp/lstate.c.o CMakeFiles/luajit.dir/src/main/cpp/lstring.c.o CMakeFiles/luajit.dir/src/main/cpp/lstrlib.c.o CMakeFiles/luajit.dir/src/main/cpp/ltable.c.o CMakeFiles/luajit.dir/src/main/cpp/ltablib.c.o CMakeFiles/luajit.dir/src/main/cpp/ltm.c.o CMakeFiles/luajit.dir/src/main/cpp/lua.c.o CMakeFiles/luajit.dir/src/main/cpp/luac.c.o CMakeFiles/luajit.dir/src/main/cpp/lundump.c.o CMakeFiles/luajit.dir/src/main/cpp/lutf8lib.c.o CMakeFiles/luajit.dir/src/main/cpp/lvm.c.o CMakeFiles/luajit.dir/src/main/cpp/lzio.c.o  -llog -latomic -lm && cd ."
  D:/ANDROID/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/windows-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin\ld: error: CMakeFiles/luajit.dir/src/main/cpp/luac.c.o: multiple definition of 'main'
  D:/ANDROID/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/windows-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin\ld: CMakeFiles/luajit.dir/src/main/cpp/lua.c.o: previous definition here
  clang.exe: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 9s
21 actionable tasks: 19 executed, 2 up-to-date

在這個(gè)錯(cuò)誤里,有兩處非常明顯:

error: CMakeFiles/luajit.dir/src/main/cpp/luac.c.o: multiple definition of 'main'
CMakeFiles/luajit.dir/src/main/cpp/lua.c.o: previous definition here

事實(shí)上,我們也不需要 Main 函數(shù)的定義,因?yàn)榫幾g為 SHARE_LIBRARY ,所以屏蔽這個(gè)文件即可。

再次構(gòu)建,發(fā)現(xiàn)還是一片紅... 錯(cuò)誤如下:

省略一堆Log
Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
  Error while executing process D:\ANDROID\Sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build D:\ANDROID_PROJECTS\HelloLua2\app\.externalNativeBuild\cmake\debug\x86 --target luajit}
  [1/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbaselib.c.o
  [2/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbitlib.c.o
  [3/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcode.c.o
  [4/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lauxlib.c.o
  [5/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcorolib.c.o
  [6/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lapi.c.o
  [7/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lgc.c.o
  [8/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/loadlib.c.o
  [9/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lobject.c.o
  [10/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldblib.c.o
  [11/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lctype.c.o
  [12/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldump.c.o
  [13/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/llex.c.o
  [14/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/liolib.c.o
  [15/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldo.c.o
  [16/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmathlib.c.o
  [17/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmem.c.o
  [18/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/linit.c.o
  [19/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lfunc.c.o
  [20/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldebug.c.o
  [21/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lvm.c.o
  [22/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lutf8lib.c.o
  [23/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/loslib.c.o
  [24/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstrlib.c.o
  [25/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lzio.c.o
  [26/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lparser.c.o
  [27/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lua.c.o
  [28/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstring.c.o
  [29/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltm.c.o
  [30/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lopcodes.c.o
  [31/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstate.c.o
  [32/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltablib.c.o
  [33/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lundump.c.o
  [34/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltable.c.o
  [35/35] Linking C shared library ..\..\..\..\build\intermediates\cmake\debug\obj\x86\libluajit.so
  FAILED: cmd.exe /C "cd . && D:\ANDROID\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang.exe  --target=i686-none-linux-android19 --gcc-toolchain=D:/ANDROID/Sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64 --sysroot=D:/ANDROID/Sdk/ndk-bundle/sysroot -fPIC -isystem D:/ANDROID/Sdk/ndk-bundle/sysroot/usr/include/i686-linux-android -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -Wa,--noexecstack -Wformat -Werror=format-security  -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++ --sysroot D:/ANDROID/Sdk/ndk-bundle/platforms/android-19/arch-x86 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -LD:/ANDROID/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libluajit.so -o ..\..\..\..\build\intermediates\cmake\debug\obj\x86\libluajit.so CMakeFiles/luajit.dir/src/main/cpp/lapi.c.o CMakeFiles/luajit.dir/src/main/cpp/lauxlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lbaselib.c.o CMakeFiles/luajit.dir/src/main/cpp/lbitlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lcode.c.o CMakeFiles/luajit.dir/src/main/cpp/lcorolib.c.o CMakeFiles/luajit.dir/src/main/cpp/lctype.c.o CMakeFiles/luajit.dir/src/main/cpp/ldblib.c.o CMakeFiles/luajit.dir/src/main/cpp/ldebug.c.o CMakeFiles/luajit.dir/src/main/cpp/ldo.c.o CMakeFiles/luajit.dir/src/main/cpp/ldump.c.o CMakeFiles/luajit.dir/src/main/cpp/lfunc.c.o CMakeFiles/luajit.dir/src/main/cpp/lgc.c.o CMakeFiles/luajit.dir/src/main/cpp/linit.c.o CMakeFiles/luajit.dir/src/main/cpp/liolib.c.o CMakeFiles/luajit.dir/src/main/cpp/llex.c.o CMakeFiles/luajit.dir/src/main/cpp/lmathlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lmem.c.o CMakeFiles/luajit.dir/src/main/cpp/loadlib.c.o CMakeFiles/luajit.dir/src/main/cpp/lobject.c.o CMakeFiles/luajit.dir/src/main/cpp/lopcodes.c.o CMakeFiles/luajit.dir/src/main/cpp/loslib.c.o CMakeFiles/luajit.dir/src/main/cpp/lparser.c.o CMakeFiles/luajit.dir/src/main/cpp/lstate.c.o CMakeFiles/luajit.dir/src/main/cpp/lstring.c.o CMakeFiles/luajit.dir/src/main/cpp/lstrlib.c.o CMakeFiles/luajit.dir/src/main/cpp/ltable.c.o CMakeFiles/luajit.dir/src/main/cpp/ltablib.c.o CMakeFiles/luajit.dir/src/main/cpp/ltm.c.o CMakeFiles/luajit.dir/src/main/cpp/lua.c.o CMakeFiles/luajit.dir/src/main/cpp/lundump.c.o CMakeFiles/luajit.dir/src/main/cpp/lutf8lib.c.o CMakeFiles/luajit.dir/src/main/cpp/lvm.c.o CMakeFiles/luajit.dir/src/main/cpp/lzio.c.o  -llog -latomic -lm && cd ."
  D:\ANDROID_PROJECTS\HelloLua2\app\src\main\cpp/liolib.c:446: error: undefined reference to 'localeconv'
  D:\ANDROID_PROJECTS\HelloLua2\app\src\main\cpp/lobject.c:287: error: undefined reference to 'localeconv'
  D:\ANDROID_PROJECTS\HelloLua2\app\src\main\cpp/lobject.c:381: error: undefined reference to 'localeconv'
  D:\ANDROID_PROJECTS\HelloLua2\app\src\main\cpp/lstrlib.c:936: error: undefined reference to 'localeconv'
  clang.exe: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 12s
21 actionable tasks: 18 executed, 3 up-to-date

這次的錯(cuò)誤都是這一個(gè):undefined reference to 'localeconv',解決辦法是提高 API Level ,我們把它改為 21 以上就可以解決這個(gè)問題。

再次構(gòu)建,終于不再報(bào)錯(cuò)了,結(jié)果如下:

Executing tasks: [clean, :app:assembleDebug]
省略一堆Log
:app:externalNativeBuildCleanDebug
Clean luajit armeabi-v7a
Cleaning... 0 files.
Clean luajit arm64-v8a
Cleaning... 0 files.
Clean luajit x86
Cleaning... 0 files.
Clean luajit x86_64
Cleaning... 35 files.
:app:externalNativeBuildCleanRelease
Clean luajit armeabi-v7a
Cleaning... 0 files.
Clean luajit arm64-v8a
Cleaning... 0 files.
Clean luajit x86
Cleaning... 0 files.
Clean luajit x86_64
Cleaning... 0 files.
:app:clean
:app:preBuild UP-TO-DATE
:app:preDebugBuild
:app:compileDebugAidl
:app:compileDebugRenderscript
:app:checkDebugManifest
:app:generateDebugBuildConfig
:app:prepareLintJar UP-TO-DATE
:app:mainApkListPersistenceDebug
:app:generateDebugResValues
:app:generateDebugResources
:app:mergeDebugResources
:app:createDebugCompatibleScreenManifests
:app:processDebugManifest
:app:splitsDiscoveryTaskDebug
:app:processDebugResources
:app:generateDebugSources
:app:javaPreCompileDebug
:app:compileDebugJavaWithJavac
:app:generateJsonModelDebug UP-TO-DATE
:app:externalNativeBuildDebug
Build luajit x86_64
Recompacting log...
[1/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcorolib.c.o
[2/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lauxlib.c.o
[3/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbaselib.c.o
[4/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbitlib.c.o
[5/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcode.c.o
[6/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lapi.c.o
[7/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lctype.c.o
[8/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmathlib.c.o
[9/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/liolib.c.o
[10/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lfunc.c.o
[11/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmem.c.o
[12/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/loadlib.c.o
[13/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/linit.c.o
[14/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldblib.c.o
[15/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lobject.c.o
[16/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/llex.c.o
[17/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldebug.c.o
[18/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lgc.c.o
[19/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldo.c.o
[20/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldump.c.o
[21/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lzio.c.o
[22/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstring.c.o
[23/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/loslib.c.o
[24/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltable.c.o
[25/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lundump.c.o
[26/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lopcodes.c.o
[27/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltm.c.o
[28/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstate.c.o
[29/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lparser.c.o
[30/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltablib.c.o
[31/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstrlib.c.o
[32/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lutf8lib.c.o
[33/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lvm.c.o
[34/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lua.c.o
[35/35] Linking C shared library ..\..\..\..\build\intermediates\cmake\debug\obj\x86_64\libluajit.so
Build luajit x86
[1/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcorolib.c.o
[2/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lapi.c.o
[3/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbaselib.c.o
[4/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbitlib.c.o
[5/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lauxlib.c.o
[6/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcode.c.o
[7/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmem.c.o
[8/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/loadlib.c.o
[9/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldo.c.o
[10/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lctype.c.o
[11/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lobject.c.o
[12/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/liolib.c.o
[13/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/llex.c.o
[14/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/linit.c.o
[15/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldebug.c.o
[16/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lfunc.c.o
[17/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lgc.c.o
[18/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldblib.c.o
[19/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldump.c.o
[20/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmathlib.c.o
[21/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lutf8lib.c.o
[22/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstate.c.o
[23/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lvm.c.o
[24/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lzio.c.o
[25/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lparser.c.o
[26/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstrlib.c.o
[27/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltable.c.o
[28/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltm.c.o
[29/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltablib.c.o
[30/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstring.c.o
[31/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lopcodes.c.o
[32/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lua.c.o
[33/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lundump.c.o
[34/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/loslib.c.o
[35/35] Linking C shared library ..\..\..\..\build\intermediates\cmake\debug\obj\x86\libluajit.so
Build luajit arm64-v8a
[1/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbitlib.c.o
[2/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lauxlib.c.o
[3/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbaselib.c.o
[4/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcode.c.o
[5/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcorolib.c.o
[6/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lapi.c.o
[7/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lfunc.c.o
[8/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/liolib.c.o
[9/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/linit.c.o
[10/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/loadlib.c.o
[11/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lobject.c.o
[12/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldump.c.o
[13/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldebug.c.o
[14/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldblib.c.o
[15/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldo.c.o
[16/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/llex.c.o
[17/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lctype.c.o
[18/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmathlib.c.o
[19/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmem.c.o
[20/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lgc.c.o
[21/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstring.c.o
[22/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lvm.c.o
[23/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltablib.c.o
[24/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lzio.c.o
[25/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lua.c.o
[26/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstate.c.o
[27/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstrlib.c.o
[28/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltable.c.o
[29/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lutf8lib.c.o
[30/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/loslib.c.o
[31/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lundump.c.o
[32/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lopcodes.c.o
[33/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltm.c.o
[34/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lparser.c.o
[35/35] Linking C shared library ..\..\..\..\build\intermediates\cmake\debug\obj\arm64-v8a\libluajit.so
Build luajit armeabi-v7a
[1/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcorolib.c.o
[2/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbitlib.c.o
[3/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lapi.c.o
[4/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lauxlib.c.o
[5/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lbaselib.c.o
[6/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lcode.c.o
[7/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldo.c.o
[8/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/llex.c.o
[9/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldump.c.o
[10/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lobject.c.o
[11/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/liolib.c.o
[12/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmathlib.c.o
[13/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lmem.c.o
[14/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/loadlib.c.o
[15/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldebug.c.o
[16/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lfunc.c.o
[17/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ldblib.c.o
[18/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lgc.c.o
[19/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/linit.c.o
[20/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lctype.c.o
[21/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lua.c.o
[22/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lopcodes.c.o
[23/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltm.c.o
[24/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/loslib.c.o
[25/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lundump.c.o
[26/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltable.c.o
[27/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstring.c.o
[28/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lutf8lib.c.o
[29/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lzio.c.o
[30/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstate.c.o
[31/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lvm.c.o
[32/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/ltablib.c.o
[33/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lstrlib.c.o
[34/35] Building C object CMakeFiles/luajit.dir/src/main/cpp/lparser.c.o
[35/35] Linking C shared library ..\..\..\..\build\intermediates\cmake\debug\obj\armeabi-v7a\libluajit.so
:app:compileDebugSources
:app:mergeDebugShaders
:app:compileDebugShaders
:app:generateDebugAssets
:app:mergeDebugAssets
:app:transformClassesWithDexBuilderForDebug
:app:transformDexArchiveWithExternalLibsDexMergerForDebug
:app:transformDexArchiveWithDexMergerForDebug
:app:mergeDebugJniLibFolders
:app:transformNativeLibsWithMergeJniLibsForDebug
:app:transformNativeLibsWithStripDebugSymbolForDebug
:app:processDebugJavaRes NO-SOURCE
:app:transformResourcesWithMergeJavaResForDebug
:app:validateSigningDebug
:app:packageDebug
:app:assembleDebug

BUILD SUCCESSFUL in 20s
33 actionable tasks: 30 executed, 3 up-to-date

再生成 APK,使用 7-ZIP 查看 APK,就可以看到我們 Lua 已經(jīng)穩(wěn)妥妥的在 APK 安裝包中了,達(dá)到 340 KB了,對于 so 庫來說也不小了。

至此,Lua 已經(jīng)編譯好了,如果需要使用,還需要寫 JNI 方法調(diào)用,不過那是后話了。

Github 地址:https://github.com/yahch/Luandroid

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,941評論 25 709
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 13,953評論 2 59
  • 前言 之前一直在用Eclipse 做開發(fā),直到今年年初才將項(xiàng)目遷移到Google 推薦的AndroidStudio...
    會飛的大象_閱讀 1,439評論 0 1
  • 嘆盡了日月, 哀一聲傷離空悲。 看倦了遷華, 尋一世安然命渡。 悟透了凡塵, 了一樁心語心愿。 時(shí)光流盡, 年華終...
    天劫閱讀 417評論 0 0
  • 不知道寫什么,所以無題啦 煩惱呀,另一半老是不回來,只有不停的寫想念了…… 回來就好啦,可以不用寫得那么無辜,可以...
    基__250303閱讀 200評論 0 0

友情鏈接更多精彩內(nèi)容