使用Android Studio+CMakeLists编译artoolkitx

2 篇文章 1 订阅

公司要预研AR方面的技术,就试试研究artoolkit,网上都是关于编译artoolkit5的例子,artoolkit5已经很久没更新了,而artoolkitx是最新版的,可是没找到关于编译artoolkitx的方法,就试着自己编译试试

先说环境:Windows10,Android Studio3.5.3,artoolkitx1.0.6,ndkr20b

首先先下载artoolkitx

再自己创建个新的项目

在新建的项目里新建个module

选Android Library

module名填arxj,包名填org.artoolkitx.arx.arxj

在app的build.gradle的dependencies{}内

implementation project(path: ':arxj')

进入下载下来的artoolkitx源码内的Source文件夹内,把除ARXJ文件夹以外的所有文件夹和文件全都复制到刚才创建的arxj的cpp文件夹下,没有自己创建一个

修改arxj的build.gradle,在android{}内添加关联CMakeLists.txt代码

externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
        }
    }

再在defaultConfig{}添加代码

externalNativeBuild {
            cmake {
                arguments "-DANDROID_STL=c++_shared", "-DANDROID_CPP_FEATURES=rtti exceptions"
                cppFlags"-std=c++11"
            }
        }

Run 'app'一下,等了半天报错

Build command failed.
Error while executing process x:\xxx\xxx\cmake\3.6.4111459\bin\cmake.exe with arguments {--build x:\xxxx\xxxx\AndroidArtoolkitx\arxj\.cxx\cmake\debug\arm64-v8a --target ARX}

拉到下边看到报错代码

点进去,原来是找不到arRefineCorners函数

再点进arRefineCorners.h发现是#if HAVE_OPENCV判断隐藏了

通过#if HAVE_OPENCV来判断当前是否用了opencv,如果没有就隐藏了,可是arDetectMarker.c里没有进行opencv判断,然后在arRefineCorners.cpp发现也有opencv判断

那arRefineCorners.h里判断opencv的意义其实不大,两种方法,一种直接删除报错代码,一种就是在arRefineCorners.h内不进行opencv判断,我选择了后一种,把#if HAVE_OPENCV注释掉

//#if HAVE_OPENCV

#ifdef __cplusplus
extern "C" {
#endif

// Given corner locations 'vertex' in observed coordinates, refine location.
// buff is a luma-only buffer of dimensions width x height.
void arRefineCorners(float vertex[4][2], const unsigned char *buff, int width, int height);

#ifdef __cplusplus
}
#endif

//#endif // HAVE_OPENCV

再Run 'app'一下,继续报错

x:\xxx\xxx\AndroidArtoolkitx\arxj\src\main\cpp\ARX\ARUtil/nftw.c:123: error: undefined reference to 'fts_close'

点开报错文件,原来是给低SDK版本系统用的代码报错,可能是我的ndk版本太高了吧,不想一个一个版本的试,那就直接注释掉,把最低SDK版本设置成21

再Run 'app'一下,运行成功,到这编译就成功了,然后把demo里的arxj的java代码复制到自己的arxj内

再然后呢就是把res文件夹内的文件或文件夹复制到自己的arxj的res内

之后是运行demo了,demo在源码的Examples文件夹内,我测试了下发现2d tracking example这个运行不了,因为这个demo有用到opencv,我没用opencv,所以就用Square tracking example进行测试

把Square tracking example的assets文件夹,java代码,layout布局都复制到自己的项目的相应位置,还要把Source/etc/android下的cparam_cache文件夹复制到assets文件夹

最后修改AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-feature android:name="android.hardware.camera.any" />
    <uses-feature android:name="android.hardware.camera"
        android:required="true" />
    <uses-feature android:name="android.hardware.camera2"
        android:required="true"/>
    <uses-feature android:name="android.hardware.camera.autofocus"
        android:required="false" />
    <uses-feature android:glEsVersion="0x00020000" android:required="true" />

    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />
    <application
        android:name="org.artoolkitx.arx.arsquaretracking.ARSquareTrackingApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name="org.artoolkitx.arx.arsquaretracking.ARSquareTrackingActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="org.artoolkitx.arx.arxj.camera.CameraPreferencesActivity"/>
    </application>

测试图片都在Documentation/Square marker pattern images文件夹下的pdf

启动很慢,默认横屏,代码还要研究,应该可以优化

Github

2020/5/11更新

加入了3d模型,优化了启动慢

Android artoolkitx渲染3D模型

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值