флаги Android NDK не определены для вкусов продукта - PullRequest
0 голосов
/ 08 мая 2018

В моем файле Gradle у меня есть

externalNativeBuild {
        ndkBuild {
            path 'src/main/jni/Android.mk'
        }
    }
    productFlavors {
        flavorone{
            externalNativeBuild.cmake {
                cFlags '-DFLAVORONE'
            }
            signingConfig signingConfigs.flavoronerelease

        }         
        flavortwo{
            applicationId "com.mycompany.flavortwo"
            versionCode 2
            versionName "1.0.1"
            externalNativeBuild.cmake {
                cFlags '-DFLAVORTWO'
            }
            signingConfig signingConfigs.flavortworelease
        }
        flavorthree{
            applicationId "com.mycompany.flavorthree"
            versionCode 7
            versionName "1.0.6"
            externalNativeBuild.cmake {
                cFlags '-DFLAVORTHREE'
            }
            signingConfig signingConfigs.flavorthreerelease
        }
    }

Чтобы добавить определенные переменные в мой файл c, чтобы я мог определить вкус. в моем файле c у меня есть:

    const char* secret;
    #ifdef FLAVORONE
        const char* secret = "flavor_1_secret";
    #elif FLAVORTWO
        const char* secret = "flavor_2_secret";
    #elif FLAVORTHREE
        const char* secret = "flavor_3_secret";
    #else
        const char* secret = "flavor_1_secret";
    #endif

    JNIEXPORT jstring JNICALL
    Java_com_mycompany_app_MainActivity_getSecret(JNIEnv *env, jobject instance) {
        return (*env)->  NewStringUTF(env, secret);
}

Проблема в том, что когда я компилирую и запускаю свой код в flavor 2 или 3, getSecret () возвращает «flavour_1_secret». Я подозреваю, что сделал что-то неправильно, определяя переменные с помощью cflags, но я новичок в работе с NDK, и у меня возникают проблемы с выяснением того, что я сделал неправильно. Я также попробовал:

    const char* secret;
    #ifdef FLAVORTWO
        const char* secret = "flavor_2_secret";
    #else
        const char* secret = "flavor_1_secret";
    #endif

    JNIEXPORT jstring JNICALL
    Java_com_mycompany_app_MainActivity_getSecret(JNIEnv *env, jobject instance) {
        return (*env)->  NewStringUTF(env, secret);
}

и скомпилировал его как flavor2. Я все еще получил аромат 1 секретное возвращение. Таким образом, кажется, что он всегда проходит через else, а переменные флага не определены.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вы используете ndkBuild (через Android.mk), а не cmake. Следовательно, в ароматизированном разделе вам нужно

externalNativeBuild.ndkBuild
0 голосов
/ 08 мая 2018

Я думаю, что вы должны заменить #elseif на #elif, препроцессор останавливается на #ifdef, если это аромат 1 , или перейти на #else, если другое, потому что #elseif неопределен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...