0%

问题描述

不少朋友在使用NDK为Android平台下编译FFmpeg,在执行configure命令的时候会报出“ERROR: xxxx not found using pkg-config”的错误,出现这个错误的原因主要是在编译FFmpeg的时候有加入第三方的编解码库(比如opus、theora等),但是configure命令却又找不到第三方库导致的,出现这个问题有两个原因,第一就是你确实没有提供相应的第三方库导致pkg-config命令找不到,这种问题只需按照要求提供好第三方库再次configure就好。第二种的话这是由于configure命令在找不到pkg-config,从而报错。

阅读全文 »

本文主要介绍如何在Mac OSX平台上使用cmake对libx265进行交叉编译,生成能在Android平台下使用的动态库so文件

准备工作

  1. 下载libx265源码并解压,我使用的版本是2.4 下载传送门
  2. 下载Android NDK编译链,我使用的NDK版本号是android-ndk-r10e
  3. 确保本机已经安装cmake
阅读全文 »

众所周知,http协议是以明文进行传输的,http在明文的传输过程中很容易出现数据被拦截篡改监控的危险,这种情况无益于一人一丝不挂的在街上裸奔,如果被人想看你,你的任何细节都将一目了然。如果你是用的是长城宽带、宽带通、铁通等这类小运营商的话,或许深有体会,就像下图我家长城宽带劫持百度首页,拦截百度的http包然后添加一些html代码在网页底部弹出自家广告,此种做法恶心至极。
长城宽带被劫持

使用HTTP协议的危害

  1. 篡改数据包,致使数据不完整,如上图插入广告
  2. 拦截数据包,对数据进行监控或获取敏感数据,如用户名密码等

鉴于以上原因,HTTP协议现已越来越不被信任,为解决HTTP带来的问题HTTPS协议应运而生。

阅读全文 »

Activity四种启动模式(android:launchMode)

  1. standard
    默认启动方式,每次startActivity都会生成一个新的实例放入栈顶
  2. singleTop
    如果发现栈顶有该Activity的实例,则重新使用栈顶的Activity并调用onNewIntent方法传递新的Intent,如果栈顶没有,则重新创建一个Activity放入栈顶,简单的理解就是栈顶找得到Activity就不创建,如果没则创建,栈顶唯一
  3. singleTask
    在Activity栈中需找需要启动Activity实例,如果有,则将该Activity实例上面的所有Activity都出栈并且调用onNewIntent方法传递新的Intent数据,如果没有找到,则创建一个新的Activity实例。简单理解就是 栈中唯一
  4. singleInstance
    创建一个新的Activity task(可以理解为一个新的进程),该task中只有一个也是唯一一个Activity实例,且与其他task的Activity相互独立,拥有自己的Context上下文,因此如果使用静态变量会出现共享数据问题
    阅读全文 »

最近装了win10系统,然后将之前win7系统上的Cocos lua工程拷贝到win10电脑上发现打开项目报错,且无法打开lua文件,错误信息如下:

1
2
An internal error occurred during: "Initialize DLTK".
Could not initialize class org.ccdt.ldt.core.internal.ast.parser.LuaSourceParser
1
2
An internal error occurred during: "build lua project:xxx".
Could not initialize class org.ccdt.ldt.core.internal.ast.parser.LuaSourceParser
阅读全文 »

由于业务需求,需要对一个txt文本文件进行倒序输入,比如文本内容为 “我是一个需要倒序输入的文本内容”,需要输出为 “容内本文的入输序倒要需个一是我”

实现方法有一下几种:

  1. 将文本文件读入到内存为String、StringBuffer或者StringBuilder,然后进行逆向遍历,此方法比较简单,对于小文本比较有效,如果文本文件比较大,比如GB级别则一次性读入内存不现实。
  2. 采用RandomAccessFile进行读取,开始将文件指针定位到文件结尾,每次读取一个字符,采用seek方法将位置当前指针位置往回指个单位,这个方法需要可以实现逆向读取文本,但是当文本中含有Unicode双字节字符或者多字节字符时候,将会面临读取错误,非常大的可能会造成乱码,且频繁的操作io,会降低程序性能。
  3. 采用内存映射文件的方式实现,即采用RandomAccessFile + MappedByteBuffer实现,先将RandomAccessFile映射成一个MappedByteBuffer,再采用Charset进行decode成相应的编码变成CharBuffer,进而可以采用CharBuffer对文件的字符进行逆向读取,不但可以进行你想读取,还可以随机访问任意一个字符
阅读全文 »

C++调用DLL的两种方法

DLL代码段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Math.h
extern "C" _declspec(dllexport) int Max(int a,int b);

extern "C" _declspec(dllexport) int Sum(int a,int b);

//Math.cpp

#include "Math.h"

int Max(int a,int b)
{
if(a>b)
return a;
else
return b;
}

int Sum(int a,int b)
{
return a+b;
}

静态调用

  1. 把生成的DLL文件、DLL函数声明的头文件、DLL相关的LIB文件拷贝到工程目录
  2. 添加LIB文件:菜单栏 - 工程 - 设定 - 连接 输入LIB文件名
  3. 现有工程包含DLL头文件
  4. 成功,可以开始使用DLL中的函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//静态调用

#include <iostream>
#include <windows.h>

#include "Math.h" //DLL的头文件

using namespace std;

int main()
{
int a=1,b=3;
cout<<Sum(a,b)<<endl;
return 0;
}
阅读全文 »

今天写一个小程序的时候,用到了MySQL数据库,用java语言编写,出现了乱码问题需要在连接的时候加上这句:?useUnicode=true&characterEncoding=utf-8
具体如下所示:

1
DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8", "root", "root");