北京之行
前几天突然发现北京有一无限星空音乐节,有扭机等我喜欢的乐队,而且价格公道,然后我就马上买好了来回火车票。这么积极去北京的另一原因是要去见我小学同学--
最后一天去了趟798,想给我那小学同学买杯子来着。不知道是我眼光有问题还是怎么着,逛了将近两个小时就没发现个顺眼点的。不过对于我拍的这张照片很是喜欢
真的有人喜欢我的博客啊
很久没看Analytics了,今天发现一个新的流量来源,看这里。他竟然花钱找人仿制我的博客界面啊!
虽然我不喜欢别人跟我一样,要不然我就不用自己做一个了。但是吧,有人喜欢我的设计比有人喜欢我的代码更让我兴奋!我要截图留念
然后去看了下我放在Google Code上的博客程序,已经有116人下载了,我感觉还是很欣慰的。毕竟有人愿意看一下自己写的代码--
用Android NDK编译FFmpeg
Android内置的编解码器实在太少,于是我们需要FFmpeg。Android提供了NDK,为我们使用FFmpeg这种C语言代码提供了方便。
不过为了用NDK编译FFmpeg,还真的花费了不少时间,也得到了很多人的帮助,最应该谢谢havlenapetr。我觉得我现在这些方法算是比较简洁的了--
下面就尽量詳細的说一下我是怎么在项目中使用FFmpeg的,但是基于我混乱的表达能力,有不明白的就问我。
你得了解JNI和Android NDK的基本用法,若觉得我的文章还不错,可以看之前写的JNI简单入门和Android NDK入门
首先创建一个标准的Android项目vPlayer
android create project -n vPlayer -t 8 -p vPlayer -k me.abitno.vplayer -a PlayerView
然后在vPlayer目录里
mkdir jni && cd jni wget http://ffmpeg.org/releases/ffmpeg-0.6.tar.bz2 tar xf ffmpeg-0.6.tar.bz2 && mv ffmpeg-0.6 ffmpeg && cd ffmpeg
混乱中
Android NDK入门
还是觉得Android文档太少,在之前的Android 中aidl如何import文件牢骚过一次了已经。于是我来尽微薄之力~
我理解的NDK是允许你把程序的一部分代码用C或C++来实现,通过JNI与Java代码交互。不要想整个程序都用C/C++完成,Android是不允许的,你的程序必须运行在Dalvik虚拟机里。
至于是什么任务需要用C/C++,那就不是我要討論的了,比如下面我要演示的这个傻逼程序就真不适合用NDK
安装NDK
你首先要保证自己的Android SDK已经安装完成,然后下载NDK,随便你解压到哪里。下面的$NDK代表你解压后的NDK路径
新建一个Android项目
如果你用Eclipse或者用Netbeans就不用我说了,记得项目名称是fuckGFW。
android create project -n fuckGFW -t 8 -p fuckgfw -k fuck.gfw -a FuckGFW
然后在项目根目录下建立一个jni文件夹,C/C++代码就要放在那里面
找不到方向了
最近看世界杯生物钟错乱,而且蚊子在黑暗中的声音特别大,所以躺了很久也睡不着,胡思乱想就想不明白了,于是起来写一写
我不明白自己到底追求什么。是自由?是名利?是知识?是安逸?
自由自在自然是好,我发现这是我最看重的东西,我无法在众多的条条框框中生存下去。于是那些大的公司我是不会进的,只好做一名自由职业者。明显的,自由并累着。。。
我很想要成功,我所谓的成功就是一个Google一样的公司。说造福人类那是顺带的效应,主要目的还是名和利啊,大把大把的钱和排山倒海的掌声。于是艰苦创业,为成功不择手段
其实我觉得这种成功还真不是我需要的,我只是害怕一些意外,比如哪天我有亲人朋友病了或怎么着,一般人是很难承担这离谱的费用的。而且我爸妈辛苦了大半辈子,我还真不知道怎么报答他们,给他们一个成功的儿子也不算是坏事。况且人活着总得拼一拼
各种各样的知识是最能让我兴奋的,超过美女。总是不自觉的就学这学那的,可是这真的不利于我要的成功,或许能让我成为一个技术大牛,然后有名,可是冇利啊。于是我很纠结
我尝试着发布开源的项目,却没时间维护。我给开源项目提交Bug,又真想顺便给解决掉,不过我还要为了成功去做那些带有利益色彩的项目。
JNI简单入门
做Android开发,最終还是免不了要用NDK的,我这才真的需要学习下JNI。简单的说,JNI就是让Java代码与native代码(比如C和C++)交互的一种机制。
参照The JNI Programmer's Guide and Specification,很成功的运行了一个小DEMO
首先编辑一个Java文件Prompt.java
public class Prompt { private native String getLine(String prompt); public static void main(String[] args) { Prompt p = new Prompt(); String input = p.getLine("Type a line: "); System.out.println("User typed: " + input); } static { System.loadLibrary("Prompt"); } }
其中native用来声明一个方法,而方法的实现则交给C代码。static代码块用来加载接下来即将生成的libPrompt.so


