Android 未定义的引用

Android Undefined Reference

我在编译时收到此错误: error: undefined reference to 'Android::os::Build::VERSION::cls'

我正在减慢实现 jni 方法以通过 cpp 访问 java 代码的速度。我做了很多挖掘工作,试图找到我的具体问题,但没有解决方案。发布了许多未定义的引用错误,但 none 与我的错误有关(如果我错了请纠正我)。我正在尝试在 class 中创建子 classes。如果有人能解释我的代码有什么问题,将不胜感激。代码如下。

//
// Created by Jaime on 12/14/2019.
//

#ifndef MENUUPDATED_ANDROID_HPP
#define MENUUPDATED_ANDROID_HPP

class Android {
    public: class os {
        public: class Build {
            public: class VERSION {
                public: static jclass cls;
                public: static jfieldID SDK_INT;
            }; static VERSION VERSION;
            public: class VERSION_CODES {
                public: const static int BASE = 1;
                public: const static int BASE_1_1 = 2;
                public: const static int CUPCAKE = 3;
                public: const static int CUR_DEVELOPMENT = 10000;
                public: const static int DONUT = 4;
                public: const static int ECLAIR = 5;
                public: const static int ECLAIR_0_1 = 6;
                public: const static int ECLAIR_MR1 = 7;
                public: const static int FROYO = 8;
                public: const static int GINGERBREAD = 9;
                public: const static int GINGERBREAD_MR1 = 10;
                public: const static int HONEYCOMB = 11;
                public: const static int HONEYCOMB_MR1 = 12;
                public: const static int HONEYCOMB_MR2 = 13;
                public: const static int ICE_CREAM_SANDWICH = 14;
                public: const static int ICE_CREAM_SANDWICH_MR1 = 15;
                public: const static int JELLY_BEAN = 16;
                public: const static int JELLY_BEAN_MR1 = 17;
                public: const static int JELLY_BEAN_MR2 = 18;
                public: const static int KITKAT = 19;
                public: const static int KITKAT_WATCH = 20;
                public: const static int LOLLIPOP = 21;
                public: const static int LOLLIPOP_MR1 = 22;
                public: const static int M = 23;
                public: const static int N = 24;
                public: const static int N_MR1 = 25;
                public: const static int O = 26;
                public: const static int O_MR1 = 27;
                public: const static int P = 28;
                public: const static int Q = 29;
            }; static VERSION_CODES VERSION_CODES;
        }; static Build Build;
    }; static os os;

    public: static void initVariables(){
        os.Build.VERSION.cls = globalEnv->FindClass(/*android/os/Build$VERSION*/XorStr<0xBA,25,0xDBDC734C>("\xDB\xD5\xD8\xCF\xD1\xD6\xA4\xEE\xAD\xB0\xEB\x87\xB3\xAE\xA4\xAD\xEE\x9D\x89\x9F\x9D\x86\x9F\x9F"+0xDBDC734C).s);
        os.Build.VERSION.SDK_INT = globalEnv->GetStaticFieldID(os.Build.VERSION.cls, /*SDK_INT*/XorStr<0xF3,8,0x0C126D72>("\xA0\xB0\xBE\xA9\xBE\xB6\xAD"+0x0C126D72).s,
                /*I*/XorStr<0x6F,2,0xF1B188D5>("\x26"+0xF1B188D5).s);
    }

    public: static int receiveOverlayType(){
        jint buildNumber = globalEnv->GetStaticIntField(os.Build.VERSION.cls, os.Build.VERSION.SDK_INT);
        if(buildNumber >= os.Build.VERSION_CODES.O) return WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
        return WindowManager.LayoutParams.TYPE_PHONE;
    }
}; static Android Android;

#endif //MENUUPDATED_ANDROID_HPP

你的public: static jclass cls;是声明,不是定义。

如果您在 C++17 模式下编译,您可以将其更改为

public: inline static jclass cls;

或在您的代码中添加定义:(在 Android class 之外!)

jclass Android::os::Build::VERSION::cls;