android - Android Wear 是否支持 Android Studio 中的 C++ (JNI)?

标签 android c++ java-native-interface wear-os

我无法让 Android Wear 项目使用 C++。我能够获得一个使用 C++ 的“手机和平板电脑”项目。这是我所做的。

  1. 这是我安装的 SDK 工具的图像。我还安装了 SDK API 级别 24-27。

    SDK Tools

  2. 我创建了一个新项目。我选中“包括 C++ 支持”。我检查“磨损”(API 26:Android 8.0(奥利奥))。我多次选择“下一步”。

  3. 对于 C++ 标准,我已经尝试了所有三个(默认工具链、C++11、C++14)。

    • 我不检查 -fexceptions-frtti

在“mobile”模块下创建的项目中,我有一个“cpp”文件夹,但在“wear”模块下没有。

如果我创建一个没有“手机和平板电脑”支持的项目(“移动”模块),那么我仍然没有在“磨损”模块下获得“cpp”文件夹。

我尝试强制项目在“wear”模块下使用 C++。这是我所做的。

  1. 我修改了 build.gradle(模块:wear)看起来像这样

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 26
        defaultConfig {
            applicationId "com.example.xorgaming.watchtestcpp"
            minSdkVersion 25
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            externalNativeBuild {
                cmake {
                    cppFlags "-std=c++11"
                }
            }
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        externalNativeBuild {
            cmake {
                path "CMakeLists.txt"
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.google.android.support:wearable:2.2.0'
        implementation 'com.google.android.gms:play-services-wearable:11.8.0'
        implementation 'com.android.support:percent:26.1.0'
        implementation 'com.android.support:support-v4:26.1.0'
        implementation 'com.android.support:recyclerview-v7:26.1.0'
        implementation 'com.android.support:wear:26.1.0'
        compileOnly 'com.google.android.wearable:wearable:2.2.0'
    }
    
  2. 我重新启动了在“wear”模块下创建“cpp”文件夹的项目。

  3. 我在“cpp”文件夹中创建了一个 native-lib.cpp 文件。它看起来像这样:

    extern "C"
    JNIEXPORT jstring JNICALL Java_com_example_xorgaming_watchtestcpp_MainActivity_stringFromJNIWatch(
        JNIEnv *env, jobject /* this */)
    {
        std::string hello = "Hello from C++ WATCH!";
        return env->NewStringUTF(hello.c_str());
    }
    
  4. 在我的 java onCreate() 函数中,我调用:stringFromJNIWatch()

  5. 一切构建无误(绿色锤子)

  6. 当我运行该项目(作为可穿戴设备)时出现此错误:

    No implementation found for java.lang.String com.example.xorgaming.watchtestcpp.MainActivity.stringFromJNIWatch()

知道我做错了什么吗? Android Wear 是否支持 C++?

最佳答案

自发布此问题以来,情况发生了很大变化。但一半的答案是:是的,您可以将 C++ 和 Java 与 Wear OS 一起使用。对于 Android 应用程序,您可以遵循相同的说明。

至于失败的原因,我的建议是仔细检查路径。如果您按照说明 here你会注意到 cpp目录与 java 目录位于同一目录中。通常类似于 MyApplication/app/src/main将有一个java目录和一个cpp目录。这有助于将所有内容都包含在最终的 .apk 中。

关于android - Android Wear 是否支持 Android Studio 中的 C++ (JNI)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48996541/

相关文章:

java - 带有空指针异常的Android setonclicklistener

c++ - 使用不同的模板参数转换模板对象,这怎么可能?

c++ - 移动字符数组的值以注册 x86 内联汇编

c++ - 从具有一个分配器的 vector 移动到具有另一个分配器的 vector

java-native-interface - 将 jbyteArray 转换为字符数组,然后打印到控制台

java - 如何使用 JNI 在 C 中创建 byte[][](java) 并将其传递给对象

android - 共享元素过渡在第一个 Activity 和第二个透明 Activity 之间留下奇怪的白色背景

java - 无法使用 CountDownTimer 类创建处理程序

安卓蜂窝 : Fragment not able to start AsyncTask?

java - 阻止所有浏览器访问某个网站