当前位置: 首页 > 面试题库 >

NDK支持不同的产品风味

郑茂勋
2023-03-14
问题内容

我想要 ndk库 不同的 字符串
。因为我有两个风味演示和现场直播,所以我想为演示风味和实时风味值“你好,我来自演示”,我想“我来自现场”

这是我的java文件代码

public class MainActivity extends AppCompatActivity {
    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Example of a call to a native method
    TextView tv = (TextView) findViewById(R.id.sample_text);
    tv.setText(stringFromJNI());
}

/**
 * A native method that is implemented by the 'native-lib' native library,
 * which is packaged with this application.
 */
public native String stringFromJNI();

}

这是我的cpp文件代码

#include <jni.h>
#include <string>

extern "C"
JNIEXPORT jstring JNICALL
Java_com_de_demo_ndk2_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "hello I am from  demo";
    return env->NewStringUTF(hello.c_str());
}

这是我的build.gradle文件

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.de.demo.ndk2"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        flavorDimensions "default"
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {

        demo
                {
                    // applicationId "com.readwhere.whitelabel.test"
                    //applicationId "com.android.rwstaging"
                    applicationId "com.android.demo"
                    versionName "2.1"
                    dimension "default"

                    externalNativeBuild {
                        cmake {

                            targets "native-lib-demo","my-executible-                   demo"

                        }}


                }
        live
                {
                    // applicationId "com.readwhere.whitelabel.test"
                    //applicationId "com.android.rwstaging"
                    applicationId "com.android.live"
                    versionName "2.1"
                    dimension "default"



                }}
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}

我已经在演示文件夹以及主文件夹中粘贴了相同的cpp文件,但是可以实现我的任务。任何帮助将不胜感激,这是一些参考链接

https://developer.android.com/studio/projects/gradle-external-native-
builds.html


问题答案:

最后我解决了。这是我的cpp文件代码

Java_com_de_demo_ndk2_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject jobject1, jstring jstring1) {

    std::string hello;
    const char *nativeString1 = env->GetStringUTFChars( jstring1, 0);
    if (strcmp(nativeString1, "demo") == 0) {
        hello = "Hello from demo C++";
    } else if (strcmp(nativeString1, "live") == 0) {
        hello = "Hello from live C++";
    }

    return env->NewStringUTF(hello.c_str());
}

我从Java代码传递风味值,这是我的Java文件代码。

public class MainActivity extends AppCompatActivity {

    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Example of a call to a native method
        TextView tv = (TextView) findViewById(R.id.sample_text);
        String value = BuildConfig.FLAVOR;
        String ndkValue = stringFromJNI(value);
        tv.setText(ndkValue);
    }

    /**
     * A native method that is implemented by the 'native-lib' native library,
     * which is packaged with this application.
     * @param value
     */
    public native String stringFromJNI(String value);
}

现在,我可以根据选定的口味获取想要的任何文本。



 类似资料:
  • 我正在使用Gradle构建系统在Android Studio上编写一个具有多种风格的应用程序。主应用程序/AndroidManifest文件有自己定义的启动程序活动,我想用Flavor/AndroidManifest文件覆盖它,我在其中定义了其他启动程序活动,这些活动只是Flavor/source代码的一部分。 编辑:以下是文件层次结构: 应用程序名称- src公司- 但当我这样做时,它给出了一个

  • /home/ndqa/opt/android-sdk/ndk-bundle/build/core/add-application.mk:178:***不再支持Android ndk:APP_STL gnustl_shared。请切换到C++_Static或C++_Shared。有关更多信息,请参见https://developer.android.com/ndk/guides/cpp-suppor

  • WooCommerce前台搜索只会从标题、内容、摘要里搜索,产品SKU有时比较重要,但它存储在custom field里,默认无法通过SKU搜索产品。本文介绍的方法可以让产品搜索支持SKU。 默认搜索 假设我要搜“SLK3423”这个SKU,默认搜索的SQL语句如下所示,可以看出只搜了标题、摘要和内容。 SELECT SQL_CALC_FOUND_ROWS wp_posts.id FROM w

  • 19小于arm64(21)的最小平台 有什么办法可以解决这个问题吗?

  • 我想知道Gradle/Google在这方面的方向是什么,因为目前不可能规划一个适当的开发计划。 版本0.7+:他们建议仍然使用ndk-build/ant版本0.8+:他们已经引入了最小的NDK支持版本1.0.0:看起来NDK支持将成为正式版本1.0.2:现在看来NDK支持不推荐使用了。 我的问题是: > 每个人都恢复到ndk-build和手工制作的Android.mk文件了吗? “将来会提供另一种

  • 一个product flavor定义了从项目中构建了一个应用的自定义版本。一个单一的项目可以同时定义多个不同的flavor来改变应用的输出。 这个新的设计概念是为了解决不同的版本之间的差异非常小的情况。虽然最项目终生成了多个定制的版本,但是它们本质上都是同一个应用,那么这种做法可能是比使用库项目更好的实现方式。 Product flavor需要在productFlavors这个DSL容器中声明: