在 windows 上为 android 构建 iotivity 时出错

Error in building iotivity for android on windows

谁能帮我解决这个错误,我似乎无法确定问题所在。我也是使用 Scons 的新手。我需要通过这个来获取 .aar 和 .apk 文件。我正在将 Iotivity 用于一个项目,该项目允许用户在没有互联网的情况下在任何平台的设备之间共享传输图像。

命令提示符:

   C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1>scons TARGET_OS=android
    scons: Reading SConscript files ...
    Processing using SCons version 3.1.1
    Python 2.7.17 (v2.7.17:c2f86d86e6, Oct 19 2019, 21:01:17) [MSC v.1500 64 bit (AMD64)] on win32
    NameError: name 'host_arch' is not defined:
      File "C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1\SConstruct", line 32:
        SConscript('build_common/SConscript')
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 668:
        return method(*args, **kw)
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 605:
        return _SConscript(self.fs, *files, **subst_kw)
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 286:
        exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
      File "C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1\build_common\SConscript", line 1025:
        env.SConscript(target_os + '/SConscript')
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 605:
        return _SConscript(self.fs, *files, **subst_kw)
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 286:
        exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
      File "C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1\build_common\android\SConscript", line 19:
        SConscript('#/extlibs/android/ndk/SConscript')
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 668:
        return method(*args, **kw)
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 605:
        return _SConscript(self.fs, *files, **subst_kw)
      File "c:\python27\lib\site-packages\scons\SCons\Script\SConscript.py", line 286:
        exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
      File "C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1\extlibs\android\ndk\SConscript", line 24:
        if host_arch in ['x86_64']:

它坏了。我想我是几年前试图清理构建的那部分时破坏它的人。 iotivity 项目 CI 系统不会在 windows 主机上构建 android 二进制文件,它为此使用 linux 构建器,我猜没有开发人员这样做,所以没有检测到正如错误消息所说,问题是 host_arch 未定义。这不是 iotivity 的基础,它只是设置 Android NDK 的依赖性工作;一旦你设置好了,后续构建就会跳过这些东西。以前的版本打开了 target_arch,这是不正确的——要获取的包取决于主机,而不是你正在构建的内容。我认为 Android 项目已经停止支持 32 位捆绑包,所以最简单的前进方式是删除测试(除非出于某种原因你有 32 位 Windows)。也就是说,从第 23 行开始更改此块:

else:
    if host_arch in ['x86_64']:
        ndk_url = ndk_url_base + '-windows-x86_64.exe'
    else:
        ndk_url = ndk_url_base + '-windows-x86.exe'
    ndk_bundle = 'android-ndk-' + NDK_VER + '.exe'

更简单的形式:

else:
    ndk_url = ndk_url_base + '-windows-x86_64.exe'
    ndk_bundle = 'android-ndk-' + NDK_VER + '.exe'

(如果不清楚,那意味着在回溯的最后一行编辑文件,C:\Users\derrick\Desktop\iotivity-2.0.1.1\iotivity-2.0.1.1\extlibs\android\ndk\SConscript