ubuntu下 vi输入方向键会变成ABCD,这是ubuntu预装的是vim tiny版本,安装vim full版本即可解决。
首先,卸载了原有的vim
$ sudo apt-get remove vim-common
然后,安装新的vim-full
$ sudo apt-get install vim
以上命令执行完后即可解决问题。
原文链接:https://blog.csdn.net/qlexcel/article/details/121751395
ubuntu下 vi输入方向键会变成ABCD,这是ubuntu预装的是vim tiny版本,安装vim full版本即可解决。
首先,卸载了原有的vim
$ sudo apt-get remove vim-common
然后,安装新的vim-full
$ sudo apt-get install vim
以上命令执行完后即可解决问题。
原文链接:https://blog.csdn.net/qlexcel/article/details/121751395
在QT中发送http请求要使用下面的几个类
首先要在项目文件里增加network的支持,在xxx.pro里面加上如下代码
1 2 |
QT += core gui QT += network |
下面是具体的代码:
logindialog.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#ifndef LOGINDIALOG_H #define LOGINDIALOG_H #include <QDialog> #include <QNetworkAccessManager> #include <QNetworkReply> #include <QNetworkRequest> #include <QUrl> #include "constants.h" #include "jsonobjs/jsonloginres.h" namespace Ui { class LoginDialog; } class LoginDialog : public QDialog { Q_OBJECT public: explicit LoginDialog(QWidget *parent = 0); ~LoginDialog(); private slots: void on_btnLogin_clicked(); void onLoginReqFinished(); private: Ui::LoginDialog *ui; QNetworkAccessManager* mNam = NULL; QNetworkReply* mLoginReply = NULL; void reqLogin(); }; #endif // LOGINDIALOG_H |
logindialog.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#include "logindialog.h" #include "ui_logindialog.h" LoginDialog::LoginDialog(QWidget *parent) : QDialog(parent), ui(new Ui::LoginDialog) { ui->setupUi(this); mNam = new QNetworkAccessManager(this); //连接返回的信号槽 //connect(mNam, SIGNAL(finished(QNetworkReply*)), this, SLOT(onLoginReqFinished(QNetworkReply*))); } LoginDialog::~LoginDialog() { delete mLoginReply; delete mNam; delete ui; } void LoginDialog::on_btnLogin_clicked() { reqLogin();; } void LoginDialog::reqLogin() { if(NULL != mLoginReply && !mLoginReply->isFinished()){ return; } QNetworkRequest request; std::string url("http://bcoder.com/loginapi"); QByteArray params ; params.append("ucode=" + ui->edtUserName->text()); params.append("&password=" + ui->edtPassword->text()); request.setUrl(QUrl(url.c_str())); //request.setRawHeader("Content-Type","application/json"); request.setRawHeader("Content-Type","application/x-www-form-urlencoded"); // request->setRawHeader("Accept","text/html, application/xhtml+xml, */*"); // request->setRawHeader("Referer","http://localhost:8888/login"); // request->setRawHeader("Accept-Language","zh-CN"); // request->setRawHeader("X-Requested-With","XMLHttpRequest"); // request->setRawHeader("User-Agent","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"); // request->setRawHeader("Content-Type","application/x-www-form-urlencoded"); // request->setRawHeader("Accept-Encoding","gzip,deflate"); // request->setRawHeader("Host","localhost:8888"); // request->setRawHeader("Content-Length","18"); // request->setRawHeader("Connection","Keep-Alive"); // request->setRawHeader("Cache-Control","no-cache"); mLoginReply = mNam->post(request, params); connect(mLoginReply, SIGNAL(finished()), this, SLOT(onLoginReqFinished())); } void LoginDialog::onLoginReqFinished() { QByteArray bytes = mLoginReply->readAll(); // bytes //QString string(bytes); // string QString string = QString::fromUtf8(bytes); JsonLoginRes res(string.toStdString()); qDebug() << "---------------------------------\n" << string; mLoginReply->close(); // mLoginReply->deleteLater(); } |
Android.mk是Android源码编译系统的Makefile,用于编译系统中的C++和Java的动态库\静态库\可执行文件和apk等.
其大概格式如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := libarity android-support-v4 guava
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_SDK_VERSION := current
LOCAL_PACKAGE_NAME := Calculator
include $(BUILD_PACKAGE)
##################################################
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libarity:arity-2.1.2.jar
include $(BUILD_MULTI_PREBUILT)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
上面的示例中共涉及到三类语法
1)变量的定义,比如其中的LOCAL_PATH为定义的变量,可以在其他地方被调用
变量不是必须全部大写或者必须以LOCAL_开头,可以是其他形式的,因为安卓的编译系统会加载所有的mk文件到一个环境里面,所以定义变量应该加上一个特殊的前缀,防止覆盖一些全局的变量.
2)my-dir为mk系统中预定义的宏,通过$(call my-dir)来调用
mk系统中还定义了很多其他的宏,这些定义均在build/core/definitions.mk中,有兴趣的可以浏览一下这个文件
3)include语法包含其他的mk文件
我们可以看到示例中有一个include $(BUILD_PACKAGE),其实BUILD_PACKAGE是在buile/core/config.mk中定义一个变量,如下:
BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk
这一行代码其实是把package.mk包含到了编译步骤中,用于编译Calculator这个apk
4)shell命令
1)通常都以LOCAL_PATH开始,指定当前工程的路径,一般也是使用my-dir宏指定,如下:
LOCAL_PATH := $(call my-dir)
2)编写具体模块编译脚本
首先确定编译模块的类型,是静态c++库\动态C++库还是可执行程序,或者jar包或者apk,参见"模块编译类型定义"部分.
a. 一个mk文件中可以编译多种类型的模块,每个模块一般都是以include $(CLEAR_VARS)开始
CLEAR_VARS实际上是引用的build/core/clear_vars.mk文件,用于清除部分以LOCAL_开始的变量(不会清除LOCAL_PATH),具体可以浏览clear_vars.mk
b. 然后定义编译这个模块所需要用到的一些LOCAL_变量,比如如下:
LOCAL_STATIC_JAVA_LIBRARIES := libarity android-support-v4 guava #编译apk用到的静态库
LOCAL_SRC_FILES := $(call all-java-files-under, src) # 要编译的源码
LOCAL_PACKAGE_NAME := Calculator #包名
c. include + 编译类型 结尾,如:
include $(BUILD_PACKAGE)
mk系统支持多种类型的编译,这些类型都在build/core/config.mk中定义,每种编译类型由一个特定的mk文件去处理,如下是在Android4.4系统中抓取的编译类型定义.
BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk
BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk
BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk
BUILD_RAW_STATIC_LIBRARY := $(BUILD_SYSTEM)/raw_static_library.mk
BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk
BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk
BUILD_RAW_EXECUTABLE:= $(BUILD_SYSTEM)/raw_executable.mk
BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk
BUILD_PACKAGE – 构建一个Android apk
BUILD_PHONY_PACKAGE:= $(BUILD_SYSTEM)/phony_package.mk
BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk
BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk
BUILD_MULTI_PREBUILT:= $(BUILD_SYSTEM)/multi_prebuilt.mk
BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk
BUILD_STATIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/static_java_library.mk
BUILD_HOST_JAVA_LIBRARY:= $(BUILD_SYSTEM)/host_java_library.mk
BUILD_DROIDDOC:= $(BUILD_SYSTEM)/droiddoc.mk
BUILD_COPY_HEADERS := $(BUILD_SYSTEM)/copy_headers.mk
BUILD_NATIVE_TEST := $(BUILD_SYSTEM)/native_test.mk
BUILD_HOST_NATIVE_TEST := $(BUILD_SYSTEM)/host_native_test.mk
BUILD_NOTICE_FILE := $(BUILD_SYSTEM)/notice_files.mk
LOCAL_PATH – 工程路径,通常为$(call my-dir),代表本目录和所有子目录
LOCAL_SRC_FILES – 项目源文件,不只是c或者java代码,也可以是apk或者so等文件,可添加多个,使用\加换行连接多个源文件
LOCAL_MODULE_CLASS – 可以为以下值:EXECUTABLES、FIRMWARE、SHARED_LIBRARIES、ETC、APPS、STATIC_LIBRARIES、NATIVE_TESTS、JAVA_LIBRARIES、FAKE、HEADER_LIBRARIES等
LOCAL_MODULE_TAGS – 在哪些系统版本下编译此项目,可以为eng、user、debug、tests、optional,optional表示在所有版本下都
LOCAL_MODULE – 项目名称
LOCAL_CERTIFICATE – 项目签名类型,可以为testkey、platform、shared、media、PRESIGNED(使用原签名),platform代表为系统应用
LOCAL_MODULE_PATH – 项目输出路径
LOCAL_PRIVILEGED_MODULE – 不设置或者设置为false,安装位置为system/app,如果设置为true,则安装位置为system/priv-app
LOCAL_MODULE_SUFFIX – module的后缀,可不设置
LOCAL_DEX_PREOPT – 是否对apk或者jar包进行odex优化,不设置代表默认优化,设置为false代表不优化
LOCAL_JACK_ENABLED – 有三种模式:full、incremental、disabled
使用warning来打印,如下:
$(warning “local_path: $(LOCAL_PATH)”)
或者使用
@echo local_path: $(LOCAL_PATH)
$(LOCAL_PATH)为mk文件中的变量
首选在mainwindow.h中加入头文件引用
1 2 |
#include <QUuid> #include <QDebug> |
然后在mainwindow.cpp的构造函数中加入下面的代码:
1 2 3 4 5 6 7 8 9 10 |
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QUuid uuid = QUuid::createUuid(); QString uuidstr = uuid.toString(); qDebug() << "RmcTOKEN: " << uuidstr; } |
解决方法:
修改svn项目目录下的conf/svnserve.conf
将anon-access的值由read改成none就可以了,如下:
1 2 |
# anon-access = read anon-access = none |
一、任务相关基本命令
1. 查看所有任务
1 |
./gradlew tasks --all |
2. 如果你的项目有多个模块,只想查看某个模块,使用如下命令(app为模块的名称):
1 |
./gradlew app:tasks |
3. 显示任务的详细信息
1 |
./gradlew help --task <task名称> |
4. 执行一个任务
1 |
./gradlew <task名称> |
二、一些可能用到的辅助任务命令,这些任务名称会显示在./gradlew tasks的执行结果中
1. 显示项目的Android依赖树
1 2 |
./gradlew androidDependencies ./gradlew app:androidDependencies #只查看app模块的Android依赖树 |
2. 显示项目的源码定义
1 2 |
./gradlew sourceSets ./gradlew app:sourceSets #只查看app模块的源码定义 |
3. 显示项目的签名信息
1 2 |
./gradlew signingReport ./gradlew app:signingReport #只查看app模块的签名信息 |
4. 打印子模块列表
1 |
./gradlew projects |
5. 打印项目中用到的所有依赖树
1 2 |
./gradlew dependencies ./gradlew app:dependencies #只查看app模块的所有依赖树 |
三、其他命令
1. 查看gradle版本和构建环境信息
1 |
./gradlew -v |
LOCAL_MODULE_TAGS :=user debug eng tests optional
user: 指该模块只在user版本下才编译
debug: 批该模块只在userdebug版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译(但只有在PRODUCT_PACKAGES中定义的模块才会被安装?)
操作系统:CentOS
1. 通过向上箭头可以查找历史记录,但是记录太多时比较麻烦(mysql控制台没有类似linux控制台的histroy命令)
2. 向上箭头比较麻烦时可以使用下面这个文件查看sql语句记录
~/.mysql_history
将一、2文件的内容清空即可
在linux命令行里输入以下命令,将不再保存记录
ln -s /dev/null $HOME/.mysql_history
需要修改bootanimation.zip
这个文件一般位于下面几个位置:
#define USER_BOOTANIMATION_FILE “/data/local/bootanimation.zip”
#define SYSTEM_BOOTANIMATION_FILE “/system/media/bootanimation.zip”
#define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE “/system/media/bootanimation-encrypted.zip”
|-part0
|-part1
|-desc.txt
1、关于part0和part1目录,安卓开机动画分成两个阶段(目录名字应该是可以随便命名的,在desc.txt里指定目录的名字就可以):
part0里的为第一阶段,按设定的帧率播放动画
part1为第二阶段,如果动画播放完还没启动完成,就循环播放这一段动画
2、关于desc.txt
文件内容如下:
506 505 15
p 1 0 part0 #000000 10 10
p 0 0 part1
s 1 /system/media/poweron.ogg
第一行506为动画图片的宽度,505为动画图片的高度,15为每秒播放的图片数
第二行:第二个参数为循环次数(0应该为无限循环?),第三个参数为暂时时间(不清楚具体运行原理)?,第四参数为图片目录,第五个参数为背景色,第六七参数为显示时钟的坐标,其中五六七参数可以不写
1、将制作好的素材压缩时,要设置压缩率为0,即不压缩,只是打个zip包。即在winrar中压缩方式选择“存储”,在ubuntu使用zip命令的时候,加上-0选项