| 日期 | 作者 | 版本 | 說明 |
|---|---|---|---|
| 2020.12.15 | Sleep Tiger | V1.0 | Release as V1.0 |
文章目錄
- 前言
- 一、Qt 在Windows 系統下如何編譯Andriod使用的動態庫?
- 二、Qt for Andriod如何在Windows開發環境下呼叫動態庫
- 1.修改.pro檔案
- 2.構建時添加庫檔案和將庫檔案一起打包
- 3.在新的專案中呼叫該庫
- 總結
前言
因為專案實際需求,在windows環境下配置了Andriod的開發環境,在專案開發程序中需要添加自己寫的動態庫,遇到了一些問題,總結一下:
參考檔案鏈接:https://download.csdn.net/download/huowubin/6609853 提示:上文需要下載,而且需要修改,以下是本篇文章正文內容,下面案例可供參考
一、Qt 在Windows 系統下如何編譯Andriod使用的動態庫?
通過簡單的示例來展示如何編譯生成動態庫(.so檔案)
原始碼:
//xxx.h 檔案
#ifndef MYLIB_H
#define MYLIB_H
#ifdef Q_WS_WIN //表示在windows環境
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif
class mylib
{
public:
int mymax(int i, int j);
int add(int i, int j);
};
extern "C" MY_EXPORT int diff(int i, int j);
#endif // MYLIB_H
//xxx.cpp檔案
#include "xxx.h"
extern "C" MY_EXPORT int mylib::mymax(int i,int j)
{
if(i>=j)
return i;
else
return j;
}
extern "C" MY_EXPORT int mylib::add(int i,int j)
{
return i+j;
}
extern "C" MY_EXPORT int diff(int i, int j)
{
if(i>=j)
return i-j;
else
return j-i;
}
//xxx.pro 檔案
#-------------------------------------------------
#
# Project created by QtCreator 2013-11-11T09:44:53
#
#-------------------------------------------------
QT -= core gui
TARGET = xxx
TEMPLATE = lib
DEFINES += XXX_LIBRARY
SOURCES += xxx.cpp
HEADERS += xxx.h
unix:!symbian {
target.path = /usr/lib
INSTALLS += target
}
選擇安卓編譯器 Andriod for armeabi-v7a , 然后點擊Qt 左下角build 按鈕【就那個小錘子】,等待構建完成,構建完成,然后點擊進入編譯生成的檔案夾,可以看到已經生成動態庫檔案,
動態庫生成路徑:
…\build-xxx_for_armeabi_v7a_GCC_4_9_Qt_5_9_1_for_Android_armv7-Release\android-build\libs\armeabi-v7a

二、Qt for Andriod如何在Windows開發環境下呼叫動態庫
1.修改.pro檔案
代碼如下(示例):
///在原始碼的andriod的檔案新建一個libs檔案夾,然后把剛才編譯生成的.so檔案復制到該檔案夾下
///-l 后面寫的是生成庫的檔案名稱 例如: libXXX.so 則-l寫法如下
LIBS += -L$$PWD/android/libs -lxxx
2.構建時添加庫檔案和將庫檔案一起打包
在專案的構建和運行Build Android APK 中如下設定:

3.在新的專案中呼叫該庫
首先,在專案中引入動態庫的頭檔案
以下是示例代碼:
//引入動態庫頭檔案
#include "xxx.h"
//使用動態庫中的類
mylib bb;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint);//
//呼叫動態庫的方法
int a=bb.add(15,9);
QString str = QString::number( a, 10 );
ui->textEdit->setText(str);
}
MainWindow::~MainWindow()
{
delete ui;
}
點擊編譯運行安卓程式,運行成功!
總結
雖然樣例比較簡單,但我實際程序中也嘗試使用過了其他的代碼,撰寫了復雜的邏輯,都是可以使用的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/236133.html
標籤:其他
上一篇:Android快速入門之基礎布局
下一篇:uniapp安卓原生插件開發流程
