於是趕快來試看看。畢竟gradle-experimantal用起來總是毛毛的。
前置準備:
- 使用sdk manager安裝cmake。(選擇「sdk tools的tab就可以看到」)
android { compileSdkVersion 24 buildToolsVersion "25.0.2" defaultConfig { ... } productFlavors { ... } externalNativeBuild { cmake { path 'src/main/cpp/CMakeLists.txt' } } }
要注意的是CMakeLists.txt的路徑。上面的例子是放在[main project]/main/cpp 裡面。
(cpp目錄不存在的話請自行新增)
當然也可以放在其他地方。最建議的位置是[main project]的根目錄。
另外,同一個module的CMakeLists.txt只能有一個。要含入其他的navive c 的lib的話都要寫在這個唯一的檔案裡面。
再建立一個JNIClass.cpp(檔名隨意),放在路徑[main project]/main/cpp。
CMakeLists.txt的內容:
# Sets the minimum version of CMake required to build your native library.
# This ensures that a certain set of CMake features is available to
# your build.
cmake_minimum_required(VERSION 3.4.1)
# Specifies a library name, specifies whether the library is STATIC or
# SHARED, and provides relative paths to the source code. You can
# define multiple libraries by adding multiple add.library() commands,
# and CMake builds them for you. When you build your app, Gradle
# automatically packages shared libraries with your APK.
add_library( # Specifies the name of the library.
app # build出來的lib的名稱。
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
JNIClass.cpp #所有c/c++檔案的列表。此例的c檔案跟CMakeLists.txt放在同一個目錄,所以可以不指定檔案路徑。若是不同路徑的話請自行指定。
) # log find_library(log-lib log) # 有要include各種android os系統內建lib的話可以用這方法找。請注意對應的顏色。 target_link_libraries(app ${log-lib} android) # 需要include的各種lib。似乎是要包含自己。
# Specifies a path to native header files. # include_directories(src/main/cpp/) # 要增加其他的原始碼所在目錄的話可以用此法。
之後重新sync project再run /debug project應該就可以了。