我一直在尝试将一个简单的Qt应用程序部署到android但没有运气.细节如下
Qt版本:从这里下载的Qt 5.1.0 for Android(Windows 32位)
Qt Creator版本:Qt Creator 2.7.2
我在Qt Creator中设置了以下选项
Android配置
Android SDK位置:C:\ adt-bundle-windows-x86-20130717\adt-bundle-windows-x86-20130717\sdk
Android NDK位置:C:\ android-ndk-r8e
Ant位置:C:\ Program Files\Java\jdk1.7.0_25
AVD名称:AndroidAVD(API Level 17,armeabi-v7a)
套件配置
套件名称:Android for arm(GCC 4.4.3,Qt 5.1.0)(默认)
设备类型:Android
设备:在Android上运行
Sysroot:它是空的
编译:GCC(第4.4.3节)
Android GDB服务器:C:\ android-ndk-r8e\prebuilt\android-arm\gdbserver
调试器:C:\ android-ndk-r8e\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-gdb.exe
Qt版本:5.1.0(android_armv7)(C:\ Qt\Qt5.1.0\5.1.0\android_armv7\bin\qmake.exe)
部署Kit的配置(对于Release和Debug):选中Deploy local Qt libraries和Use Local Qt libraries选项
操作系统:Windows 7 64位
问题
当我尝试构建时,一切都很好.我在构建目录中获得了libTheTestApp.so.此外,项目目录现在包含一个名为"android"的文件夹,其中包含清单文件和一些其他文件.
当我尝试运行应用程序时,模拟器启动但我找不到我的应用程序.如果我关闭我的模拟器并返回到Qt Creator,我会收到以下错误
请稍候,搜索适合目标的设备:android-17.
构建/部署项目时出错TheTestApp(套件:Android for arm(GCC 4.4.3,Qt 5.1.0))执行步骤'部署到Android设备'时
如果我在模拟器运行时执行"adb devices",我会获得正在运行的模拟器的id
此外,我尝试在此处发布此问题之前搜索互联网.我找到了这个链接.
我的问题是如何将Qt5应用程序部署到Android设备?是否有任何链接说明如何做到这一点?我问这个是因为我在构建应用程序时遵循了Qt5ForAndroidBuilding链接中提供的说明.
谢谢你的时间.
我有一个自定义模型,它源自QAbstractListModel,它暴露给QML.我需要支持添加新项目和删除现有项目的操作.虽然插入操作没有任何问题,但删除操作会导致应用程序在调用endRemoveRows()函数时崩溃.
void GPageModel::addNewPage()
{
if(m_pageList.count()<9)
{
beginInsertRows(QModelIndex(),rowCount(),rowCount());
GPage * page = new GPage();
QQmlEngine::setObjectOwnership(page,QQmlEngine::CppOwnership);
page->setParent(this);
page->setNumber(m_pageList.count());
page->setName("Page " + QString::number(m_pageList.count()+1));
m_pageList.append(page);
endInsertRows();
}
}
void GPageModel::removePage(const int index)
{
if(index>=0 && index<m_pageList.count())
{
beginRemoveRows(QModelIndex(),index,index);
qDebug()<<QString("beginRemoveRows(QModelIndex(),%1,%1)").arg(index);
GPage * page = m_pageList.at(index);
m_pageList.removeAt(index);
delete page;
endRemoveRows();
}
}
Run Code Online (Sandbox Code Playgroud)
GPage类派生自QObject.我很想知道在尝试调用endRemoveRows()时导致应用程序崩溃的原因.当调用endRemoveRows()时,我在"QList :: at:"索引超出范围""时得到"ASSERT失败."如何从QAbstracListModel中删除行?还有其他方法吗?
我在Windows 7 64位计算机上使用Qt 5.1.0.
问题
我有一些钥匙,我想保证它的安全。目前,原生共享库按需生成它们。我的 apk 使用这个共享库来获取密钥。当前实现的问题是攻击者可能会提取 apk,复制共享库并调用生成密钥的函数并获取密钥。因此,我想确保共享库仅在我的 apk 调用时才生成有效密钥。
解决这个问题的方法
解决这个问题的方法涉及到 NDK 端的 apk 篡改检测。基本思想是在运行时从 JNI 获取调用 APK 的签名。如果签名有效,则库生成有效密钥,否则生成无效密钥。
这种方法的已知局限性
到目前为止我做了什么到目前为止 的实现是基于这个stackoverflow帖子中提到的想法
获取DEX文件区域的起止地址
FILE *fp;
fp = fopen("/proc/self/maps", "r");
if(fp!=NULL){
char line [ 2048 ];
while ( fgets ( line, sizeof line, fp ) != NULL ) /* read a line */
{
if (strstr(line, ".dex") != NULL) {
//This is the line we want
__android_log_write(ANDROID_LOG_INFO,"DexFile",line);
char * startingAddress;
char * endingAddress;
startingAddress = …
Run Code Online (Sandbox Code Playgroud)android ×2
qt ×2
android-ndk ×1
apk ×1
deployment ×1
dex ×1
qml ×1
qt5 ×1
qtquick2 ×1
security ×1