QT与安卓

自己的笔记(未完待续)

QT的安卓外壳activity里,为QT的C代码添加环境变量(作为参数传递)

修改QTactivity.java   添加别的类传递过来的参数 保存到ENVIRONMENT_VARIABLES中

       public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

	if(getIntent().getExtras()!= null && getIntent().getExtras().containsKey("android_call_activity_variables")){
             ENVIRONMENT_VARIABLES = ENVIRONMENT_VARIABLES
                      +"\t"+getIntent().getExtras().getString("android_call_activity_variables");
         }

 public void onServiceConnected(ComponentName name, IBinder service)
        {
            m_service = IMinistro.Stub.asInterface(service);
            try {
                if (m_service!=null)
                {
                    Log.e("ding","ENVIRONMENT_VARIABLES:" + ENVIRONMENT_VARIABLES);
                    Bundle parameters= new Bundle();
                    parameters.putStringArray(REQUIRED_MODULES_KEY, m_qtLibs);
                    parameters.putString(APPLICATION_TITLE_KEY, (String)QtActivity.this.getTitle());
                    parameters.putInt(MINIMUM_MINISTRO_API_KEY, MINISTRO_API_LEVEL);
                    parameters.putString(QT_PROVIDER_KEY, QT_PROVIDER);
                    parameters.putInt(MINIMUM_QT_VERSION_KEY, QT_VERSION);
                    parameters.putString(ENVIRONMENT_VARIABLES_KEY, ENVIRONMENT_VARIABLES);
                    if (null!=APPLICATION_PARAMETERS)
                        parameters.putString(APPLICATION_PARAMETERS_KEY, APPLICATION_PARAMETERS);
                    // parameters.putStringArray(REPOSITORIES, null);
                    m_service.requestLoader(m_ministroCallback, parameters);
                }
            } catch (RemoteException e) {
                    e.printStackTrace();
            }
        }



QT hello工程中,C代码 1.取得环境变量  2.从安卓的so得到变量


#include "mainwindow.h"
#include "ui_mainwindow.h"
  #include <QLibrary>
  #include  "qprocess.h"



MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    
     ui->setupUi(this);
     callndk();
     envfromandroid();

     Jvm *jvm= new Jvm();
     jvm->callvm();
}

MainWindow::~MainWindow()
{
    delete ui;
}


 void MainWindow::envfromandroid()
{
    QString env = "text from: " + QProcessEnvironment::systemEnvironment().value("hello_qt");
    // QProcessEnvironment environment = QProcess::systemEnvironment();
    ui->label_3->setText(env);

       env = "text from SDK : " + QProcessEnvironment::systemEnvironment().value("activity_2_qt");
        // QProcessEnvironment environment = QProcess::systemEnvironment();
        ui->label_4->setText(env);
}

  char * MainWindow::callndk()
  {   char buf[100]; memset(buf,0,100);
      QLibrary *hello_lib = NULL;
      //写清楚库的路径,如果放在当前工程的目录下,路径为./libhello.so
      //hello_lib = new QLibrary("lib://armeabi/libnative.so");
      hello_lib = new QLibrary("/data/data/org.kde.necessitas.example.callso/lib/libnative.so");

      //加载动态库
      hello_lib->load();
      if (!hello_lib->isLoaded())
      {
          printf("===================================load libnative.so failed!\n");
        //  ui->label->setText("fail to load so");
          return 0;
      }

      //定义函数指针
      typedef int (*Fun)();
      //resolve得到库中函数地址
      Fun hello = (Fun)hello_lib->resolve("testso");
      int g=0;
      if (hello)
      {
          g = hello();
      }

       sprintf(buf,"integer from ndk, value: %d",g);
       ui->label_1->setText(buf);


      //======================================================================
      memset(buf,0,100);

      char * bstr="..";
      //定义函数指针
      typedef char* (*FunS)();
      //resolve得到库中函数地址
      FunS getstr = (FunS)hello_lib->resolve("stringfromso");

      if (getstr)
      {
          bstr = getstr();
      }
      sprintf(buf,"string from ndk, value: %s",bstr);
        ui->label_2->setText(buf);

      //卸载库
      hello_lib->unload();

      
      return bstr;
  }




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值