NDK 支持不同的 Product Flavor

NDK support with different Product Flavour(NDK 支持不同的 Product Flavor)
本文介绍了NDK 支持不同的 Product Flavor的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我想要 ndk 库中的 不同 字符串 .因为我有两种风格的演示和现场直播,所以我想要价值你好,我来自演示",对于演示风味和现场风味,我想要你好,我来自现场"

I want different string value from ndk library. as i have two flavor demo and live I want value "hello I am from demo " for demo flavor and for live flavor i want "hello I am from live "

这是我的java文件代码

Here is my java file code

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文件代码

Here is my cpp file code

#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 文件

this is my build.gradle file

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 文件但可以完成我的任务.任何帮助将不胜感激这是一些参考链接

I have paste same cpp file in demo folder as well as in main folder but could achieve my task. Any help would be appreciate this are some refrence links

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

如何设置CmakeLists路径每个 Android ABI 的产品风格?

推荐答案

终于找到解决方案了.这是我的cpp文件代码

Finally I a solution. Here is my cpp file code

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 文件代码.

I am passing flavor value from java code here is my code for java file.

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);
}

现在我可以根据选择的风格获得我想要的任何文本.

Now i can get whatever text i want according to selected flavor.

这篇关于NDK 支持不同的 Product Flavor的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)