Write native Android UI directly in c++!
Why to pass complex data structures between java and c side? Access android widgets directly from c++!
Filling layout from c++:
    void onCreate(const jni_interface::SharedPtr<AndroidViews::ViewGroup>& root){
        auto btnAdd = Button::make("Add more buttons");
        root->addView(*btnAdd);
      
        btnAdd->setOnClickListener([root](const SharedPtr<View>& view) {
            auto button = Button::make("Hello!");
            root->addView(*button);
            button->setOnClickListener([i=0](const SharedPtr<View>& view) mutable {
                Button* btn = static_cast<Button*>(view.get());
                btn->setText(std::to_string(++i).c_str());
            });          
        });
    }You can easily mix java side logic with c++:
        SignalReceiver hideAd = SignalReceiver.make("hideAd");
        hideAd.listen(new SignalReceiver.Listener() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), "Hiding Ad.", Toast.LENGTH_LONG).show();
            }
        });SignalSender<> hideAd("hideAd");
hideAd.send();And vice-versa:
    SignalSenderO signalSender = new SignalSenderO("btnClick");
    public void btnClick(View view) {
        signalSender.send(view);
    }SignalReceiver<jobject>& signal = SignalReceiver<jobject>::link("btnClick");
signal.set_unique_listener([](jobject obj){
    SharedPtr<Button> btn = adopt_object<Button>(obj);
    btn->setText("Clicked");
});Target Android devices >=4.0
Documentation at /cpp2android/docs
Your cpp source code in /cpp . cpp Entry point in main.h