最近在自己的音乐播放器项目中要加入跑马灯效果,于是便研究了下。跑马灯效果是 TextView 自带的一个属性,使用 TextView 来实现单个、多个跑马灯效果比较简单。

阅读全文 »

Android JNI 开发时,如何注册 JNI 的方法,Java 才能调用,下面说一下 JNI 的两种注册方法。

第一种方法:静态注册

所谓静态注册就是调用 java 的命令工具 javah 来生成头文件,然后再实现头文件中的所有函数即可。这种方法比较简单,首先在命令行中(我这里使用的是 windows cmd,linux、mac 是一样的),进入到 src 目录下,然后执行:

1
$ javah -d E:\SourceCode\Android\JniTest\ -jni com.coolerfall.HelloJni

其中 - d 表示生成的头文件的输出目录,可以自行设置,com.coolerfall.HelloJni 是包含有 native 方法的类,native 方法如:

1
public static native void init();

最后生成一个 com_coolerfall_player_HelloJni.h 头文件,接下来就可以新建一个 c 文件实现这些函数就 ok 了。

阅读全文 »

在 Android 开发中不免会使用到 JNI,JNI 编程中可以使用 javah 等工具自动生成 jni 的头文件,但是如果想自己手动注册,那么就需要了解 JNI 方法的签名规范,记录一下,以备以后查看。

阅读全文 »

最近在 linux 使用 ndk 编译一些东西,就使用到了 shell 脚本,结果在执行的时候出现:

bash: ./build_android.sh: /bin/bash^M: bad interpreter: No such file or directory

使用 vim 打开 shell 脚本,发现并没有问题,最后发现是由于 shell 脚本在 windows 下编写的,copy 到 linux 后文本格式不对,所以只需要更改一下文本格式就可以了,用 vim 打开 shell 脚本,在命令行模式下:

:set fileformat=unix

最后保存退出就可以执行了。

Android 的四种 launchMode 是我们比较常用的基础点,但是有时候很容易就混淆了。Activity 一共有四种启动方式:standard、singleTask、singleInstance、singleTop,四种方式各有个的特点,在不同情况下会使用不同的启动方式。

阅读全文 »

现在在项目中 git 的使用已经比较频繁了,难免会遇到各种各样的小问题,这里记录下这些问题。

1. 在 push 大文件的时候遇到

error: RPC failed; result=22, HTTP code = 411
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly

这个是因为 http buffer 不够造成的,可以简单配置 git 来解决:

git config http.postBuffer 67108864

2. 想要把已经 push 的文件(夹)加入到.ignore 中

直接添加到.ignore 中是不能成功的,因为已经 push 到服务器了,需要先删除本地缓存的文件:

1
$ git rm -r --cached .idea

然后再将其添加到.ignore 中,最后 git push 就 ok 了

最近在做一个像豌豆荚游戏文件类似的东西,但是遇到个奇怪的问题,就是应用打开后 home 键退出,然后再点击文件夹,会同时弹出文件夹以及 home 退出之前的界面,经过一番折腾,算是整明白了问题。首先说说 taskAffinity,每个 application 创建的时候,都会有 taskAffinity,默认情况下同一个 application 下的所有 activity 都属于同一个 taskAffinity,都会在相同的 task 中。而这里创建的文件夹快捷方式,相当于是让其指定到了应用的某个 acitivity,如果没有给这个 activity 指定 taskAffinity 的话,那么将会与前面的 activity 运行在相同的 task 中,也就是在打开快捷方式后,若前面的 activity 未 finish 掉,这个时候会从栈中弹出,出现我所遇到的问题。最后在文件夹快捷方式指定的 activity 中加入 android:taskAffinity=":icon",问题就解决了。

用 AS 开发也有一段时间了,发现 AS 可以使用 maven,在 gradle 中可以很方便的解决依赖问题,再也不用去下载相应的 jar 包了。gradle 添加一些依赖库比较方便,但是如果想把自己的一些开源项目上传到 maven 中央库给别人使用,就稍微有些麻烦了。现在比较简单的办法是先将自己在 github 上的项目提交到 Sonatype,然后再同步到 maven 中央库去,大致说一下流程。

阅读全文 »

很多应用在卸载后都会弹出一个网页做用户卸载反馈,这就需要监听 App 的卸载,但是应用一旦卸载就不会再执行任何程序了,如何才能弹出网页,答案就是在应用开启时就 fork 出一个子进程来,在进程中对 App 进行卸载监听。在 linux 中有个东西叫 inotify,可以对指定的文件进行监听(包括修改,删除等等),基本的流程就是 inotify_init->inotify_add_watch->inotify_event,在 inotify_event 读取操作的时候是阻塞的,一直会等到指定的文件变动后才会往下执行。

阅读全文 »
0%