Unity 3D 导出Android Eclipse项目

最近接触了Unity 3D这款游戏引擎,主要是想应用在移动领域,跨平台是一大亮点之一,这样可以在并不熟悉Android或者iOS编程的经验上应用。开发了一个Demo并试着将Unity 3D项目移植到Android平台,总算移植成功了。现在记录一下主要步骤以及一些错误。

我使用的Unity 3D是4.0.1版本的,要发布Android版本的应用需要付费版本的,免费版本不能发布Android应用。作为学习可以使用破解版本,但真正发布到应用商店还是需要支付费用的。

Unity 3D发布Android Eclipse项目的步骤:

1.新建一个Unity 3D项目,点击File–&g[......]

Read more

Android添加admob广告

今天试着将android的应用植入google abmob的广告,没想到会花了如此长的时间。其实android植入admob的的广告并不复杂,就是版本不一致导致了各种问题,现在总算解决了。以下总结一下。

1.首先要注册一个admob的账号,获取应用的发布ID,这就省略了。

2.下载admob的SDK GoogleAdMobAdsSdk-6.2.1,并导入到项目中去。

3.配置AndroidManifest.xml。

uses-sdk标签

<uses-sdk android:minSdkVersion="7"
android:targetSdkVersion="[......]

Read more

This Handler class should be static or leaks might occur

出现This Handler class should be static or leaks might occur警告的原因是如下:

Handler类应该应该为static类型,否则有可能造成泄露。在程序消息队列中排队的消息保持了对目标Handler类的应用。如果Handler是个内部类,那么它也会保持它所在的外部类的引用。为了避免泄露这个外部类,应该将Handler声明为static嵌套类,并且使用对外部类的弱应用。

就是说Handler得类声明必须声明为static的嵌套类。
例如常用的Hander用法如下:

import android.os.Han[......]

Read more

一个常用的android底部菜单功能

早前曾经写过一篇文章TabWidget去除底部下划线 介绍了关于TabWidget去除底部下划线功能的,当时写的比较仓促,代码比较乱,主要是将android Tabhost采用反射机制替换了原来的下划线背景从而达到去除底部下滑线的功能。Tabhost控件是放在顶部,随着android UI设计的成熟,越来越多的菜单放在了底部,这样更符合用户习惯。图-1的底部菜单布局比较常见的android UI设计。

现在将这样的常用功能整理出来,便于以后更快捷的开发相关的程序,如图-1。

图-1 常用的底部菜单布局

BottomMenuActivity是主要的类,实现了Tabhos[......]

Read more

android mapview实现弹出层功能

分享一个点击地图实现标注,并且点击该点标注显示该点的经纬度(通过弹出层)的功能。如图-1所示。通过弹出层可以显示更为复杂的布局,点击关闭按钮即可删除显示层。

图-1. mapview弹出层功能

主要思路:1.第一步当然是要让地图显示出来,并设置相关的参数。

2.布局好弹出层的xml布局文件。

3.第三步是关键的的思路,重写boolean onTap(int index)和boolean onTap(GeoPoint p, MapView mapView) 的方法。这两个方法还是有区别的。至于这两个函数的一些区别一击点击地图获取经纬度功能的说明,可以参考之前写的一[......]

Read more

java.lang.UnsatisfiedLinkError错误

目前这个错误主要是针对Android的解决办法,至于其他如Web应用,DLL调用的错误可以参考。

将android的A项目的打包好的so文件,放到了B项目时候,调用就会出错:java.lang.UnsatisfiedLinkError。

其实原因就只找不到相应的so路径。重新编译so文件固然可以解决,但比较麻烦。出错的根源在于把java代码声明的JNI方法转化成C\C++头文件时产生的路径与新的项目路径不一样造成的,如A项目执行javah -classpath bin/classes com.jni.main.Jni, com.jni.main.Jni是A项目的包名,如果B项目的j[......]

Read more

android jni 调用C代码

介绍一下android调用C代码,采用的Cygwin Terminal编译C源码的使用经验。

编译其实是可以采用Windows安装虚拟机Linux系统,Cygwin 相对也是比较的简单。

1.下载并安装Cygwin 。

进入http://www.cygwin.com/,下载最新的Cygwin程序。至于安装过程省略。以我安装的目录(E:\Android_NDK)为例,而Android的工程目录是E:\AndroidTV。

2.新建一个android项目。

(1.)编写java源码

新建一个JniTest项目,包名是com.jni.main;新建一个类文件Jni[......]

Read more

android C Socket 抓取网页数据

最近接触了android的jni,所以学习了一些关于android调用C的相关技术。以下是Linux下(android可以调用)采用C语言抓取网页数据的方式。

这段代码也是取之网络,稍作修改。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h&gt[......]

Read more

如何在eclipse打印C调试信息

android采用jni方式调用C语言时,是无法通过printf()函数将C的调试信息打印到eclipse控制台的,要打印C的运行信息,需要加入以下三个步骤:

1. 在对应的Android.mk文件中加入:
LOCAL_LDLIBS := -llog

2.在要使用LOG的c/cpp文件中加入:
#include <android/log.h>
#define LOGD(…) __android_log_print(ANDROID_LOG_DEBUG, “TAG”, __VA_ARGS__)

3.c/cpp代码中添加打印信息的代码:
LOGLOGD(“&[......]

Read more

Android 实现手动画图功能

实现一个android手动画图的功能,界面如图。

图-1 一个手动画图的例子

完整源码:

package com.fingerpaint.main;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.os[......]

Read more