介绍
我认为这是一个问题
长时间
(根据投诉判断)在Android Studio(更具体地说
NDK
构建系统)。现在,在最新版本中,它终于准备好并开始工作了(希望如此)。
注:
gradlew
构建速度明显快于使用
Android Studio IDE
,并且可以使用批处理文件脚本生成(
.bat
).
C制造可能的问题(P=问题,C=原因,S=解决方案)
(P1)
Android Studio
如果支持多个ABI,则每次都会重建所有内容请参见
this SO Q/A
.
(C1)构建变体都具有相同的输出目录。o文件。
(S1)您需要将构建目录拆分为release/debug和不同的abi。
我的设置(ndkBuild)
Android Studio 3.1
,
NDK release 10
,
gradle
版本4.4(插件3.1.0)
我有两个图书馆要建(
libhello_world.so
使用1个c++文件
libjni_photoeditor.so
有24个c++文件)。
我正在使用
externalNativeBuild
-&燃气轮机;
ndkBuild
到
build
我的本机代码(您
能够
使用
CMake
此外,我还没有对此进行测试)。
应用程序级别
build.gradle
:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
defaultConfig {
applicationId "xxxxxxxxxxxxxxxxxxxxx"
minSdkVersion 16
targetSdkVersion 16
versionCode 1
versionName "1.0"
ndk {
abiFilters 'armeabi-v7a'
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles.add(file('proguard-android-optimize.txt'))
proguardFiles.add(file('proguard-rules.pro'))
}
debug {
minifyEnabled false
jniDebuggable true
renderscriptDebuggable true
}
}
externalNativeBuild {
ndkBuild {
path 'src/main/cpp/Android.mk'
}
}
}
dependencies {
}
Application.mk
:
APP_ABI := armeabi-v7a
APP_PLATFORM := android-19
APP_STL := stlport_static
Android.mk
:
#================================================
LOCAL_PATH := $(call my-dir) #only call it ONCE !
#================================================
include $(CLEAR_VARS)
LOCAL_MODULE := hello_world
LOCAL_MULTILIB := 32
LOCAL_SRC_FILES := hello_world.cpp
include $(BUILD_SHARED_LIBRARY)
#================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libjni_photoeditor
LOCAL_MODULE_TAGS := optional
LOCAL_SHARED_LIBRARIES := libm liblog libjnigraphics
LOCAL_LDLIBS := -lm -llog -ljnigraphics -lbcc
LOCAL_LDLIBS := -lm -llog -ljnigraphics
LOCAL_SRC_FILES := _jni.cpp utils.cpp quantize.cpp #etc.. 24 files
LOCAL_CFLAGS := -Werror \
-I$(OUT)/../../../../frameworks/compile/libbcc/include
LOCAL_LDFLAGS := -L$(OUT)/system/lib
include $(BUILD_SHARED_LIBRARY)
测试1。Android Studio
Build -> Build APK(s)
建筑
(A)
修改
我的一个项目24
C++
文件(
quantize.cpp
)和重建。
(B)
构建->生成APK
(C)
只有C:\Android\PhotoRend1\app\build\intermediates\ndkBuild\debug\obj\local\armeabi-v7a\objs debug\jni\u photoeditor\quantize。o时间戳已更改(和库)。
测试2。
格拉德勒
终端窗口(命令行)生成
从我使用的项目根目录
格拉德勒
在一个
terminal window
到
assemble
我的
apk
.
(1)
一切都是最新版本:
C: \Android\PhotoRend1>gradlew assembleDebug
Starting a Gradle Daemon, 1 busy and 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
> Configure project :app
> Task :app:externalNativeBuildDebug
Build hello_world armeabi-v7a
make.exe: `C:/Android/PhotoRend1/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/libhello_world.so' is up to date.
Build jni_photoeditor armeabi-v7a
make.exe: `C:/Android/PhotoRend1/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/libjni_photoeditor.so' is up to date.
BUILD SUCCESSFUL in 3m 46s
(2)
修改
我的一个项目24
C++
文件(quantize.cpp)并重新组装。
(3)
一个文件更改是最新版本:
C: \Android\PhotoRend1>gradlew assembleDebug
> Configure project :app
> Task :app:externalNativeBuildDebug
Build hello_world armeabi-v7a
make.exe: `C:/Android/PhotoRend1/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/libhello_world.so' is up to date.
Build jni_photoeditor armeabi-v7a
[armeabi-v7a] Compile++ thumb: jni_photoeditor <= quantize.cpp
[armeabi-v7a] SharedLibrary : libjni_photoeditor.so
BUILD SUCCESSFUL in 59s
(4)
正如您所看到的,它进行了增量构建。
结构(带
abiFilters 'x86', 'armeabi-v7a'
):
C:\Android\PhotoRend1\app\build\intermediates\ndkBuild
|
V
ââââdebug
ââââobj
ââââlocal
ââââarmeabi-v7a
â ââââobjs-debug
â ââââhello_world
â ââââjni_photoeditor
ââââx86
ââââobjs-debug
ââââhello_world
ââââjni_photoeditor
一些链接:
Manual
NDK
updates