2017-05-03 74 views
0

我都有Android ndkbuild不是抄袭我的共享库的中间体/ ndkbuild文件夹中的一个问题。我创建了我的模块在Android.mk这样的:的Android NDK产生错误的命令

Android.mk

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
EXT_LIB_ROOT := $(LOCAL_PATH)/../prebuilt/dcmtk 

LOCAL_MODULE := ofstd 
LOCAL_SRC_FILES := $(EXT_LIB_ROOT)/ofstd/lib/$(TARGET_ARCH_ABI)/libofstd.so 
LOCAL_EXPORT_C_INCLUDES := $(EXT_LIB_ROOT)/ofstd/include 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := oflog 
LOCAL_SRC_FILES := $(EXT_LIB_ROOT)/oflog/lib/$(TARGET_ARCH_ABI)/liboflog.so 
LOCAL_EXPORT_C_INCLUDES := $(EXT_LIB_ROOT)/oflog/include 
LOCAL_SHARED_LIBRARIES := ofstd 
include $(PREBUILT_SHARED_LIBRARY) 

它建立和产生的命令是:

D:\android-sdk\ndk-bundle\\build\ndk-build.cmd NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=C:\dev\trunk\myApp\app\Android.mk NDK_APPLICATION_MK=C:\dev\trunk\myApp\app\Application.mk APP_ABI=x86 NDK_ALL_ABIS=x86 NDK_DEBUG=1 APP_PLATFORM=android-21 NDK_OUT=C:/dev/trunk/myApp/app/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n 

现在,从日志的输出:

md "C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib\x86" >NUL 2>NUL || rem 
D:/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [x86] "Gdbserver  ": "[i686-linux-android] C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib/x86/gdbserver" 
copy /b/y "D:\android-sdk\ndk-bundle\build\\..\prebuilt\android-x86\gdbserver\gdbserver" "C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib\x86\gdbserver" > NUL 
D:/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [x86] "Gdbsetup  ": "C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib/x86/gdb.setup" 
D:/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe "set solib-search-path C:/dev/trunk/myApp/app/build/intermediates/ndkBuild/debug/obj/local/x86" > C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib/x86/gdb.setup 
D:/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe "directory D:/android-sdk/ndk-bundle/build//../platforms/android-21/arch-x86 D:/android-sdk/ndk-bundle/build//../sources/cxx-stl/gnu-libstdc++ C:/dev/trunk/myApp/app/../prebuilt/dcmtk/ofstd/include" >> C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib/x86/gdb.setup 
md "C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\obj\local\x86" >NUL 2>NUL || rem 
D:/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [x86] "Prebuilt  ": "libofstd.so <= C:/dev/trunk/myApp/app/../prebuilt/dcmtk/ofstd/lib/x86/" 
copy /b/y "C:\dev\trunk\myApp\app\..\prebuilt\dcmtk\ofstd\lib\x86\libofstd.so" "C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\obj\local\x86\libofstd.so" > NUL 
D:/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [x86] "Install  ": "libofstd.so => C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib/x86/libofstd.so" 
copy /b/y "C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\obj\local\x86\libofstd.so" "C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib\x86\libofstd.so" > NUL 
D:/android-sdk/ndk-bundle/build//../toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-strip --strip-unneeded C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib/x86/libofstd.so 
D:/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [x86] "Prebuilt  ": "liboflog.so <= C:/dev/trunk/myApp/app/../prebuilt/dcmtk/oflog/lib/x86/" 
copy /b/y "C:\dev\trunk\myApp\app\..\prebuilt\dcmtk\oflog\lib\x86\liboflog.so" "C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\obj\local\x86\liboflog.so" > NUL 
D:/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [x86] "Install  ": "liboflog.so => C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib/x86/liboflog.so" 
copy /b/y "C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\obj\local\x86\liboflog.so" "C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib\x86\liboflog.so" > NUL 
D:/android-sdk/ndk-bundle/build//../toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-strip --strip-unneeded C:\dev\trunk\myApp\app\build\intermediates\ndkBuild\debug\lib/x86/liboflog.so 

不幸的是,没有文件被复制或生成。通过从命令行运行相同的命令,结果是相同的。但是,如果我们在命令结束跳过-n标志,命令成功与文件复制完成。所以,我的问题是如何省略-n,什么是该标志的目的是什么? 我正在使用最新的稳定ndk版本。

回答

0
  1. 检查local.properties项目文件夹中的文件的路径NDK。 它显示了用于构建makefile的ndk-bundle路径。

    ndk.dir=/Users/../Library/Android/sdk/ndk-bundle 
    
  2. 检查gradle文件中的构建脚本。该脚本显示了共享库应位于:

    sourceSets.main { 
        jni.srcDirs = [] 
        jniLibs.srcDir 'src/main/libs' 
    } 
    

    ,这表明生成文件路径NDK建设:

    externalNativeBuild { 
        ndkBuild { 
         path 'src/main/jni/Android.mk' 
        } 
    } 
    

检查我的另一个答案也是,也许它会帮助你。 Linking shared libraries

+0

我明明宣布ndkBuild和NDK工具路径,因为它编译和执行生成文件的脚本。我试图设置jniLibs.srcDir“的src/main /库”,但我不知道什么是应该做的,虽然 –

+0

@NumLock你尝试与终端建设?只需转到jni文件夹,然后运行ndk-build。如果它构建共享库,然后再次检查你的gradle脚本。 – JavadKhan

+0

我用Windows命令行,正如我所说,NDK-建设将文件复制到相应的目录,但只有当我跳过-n标志 –