`

Android Platform 3.0 SDK和Eclipse ADT安装记录四

 
阅读更多

 

此页面记录开发中遇到的显示编程问题。内容随时可能变更。

 

一、Skia

Android的二维渲染引擎

http://code.google.com/p/skia/

 

1. 两类抗锯齿

Skia有两种不同的抗锯齿,用不同的标志表示:

void setAntiAlias(boolean aa)

void setFilterBitmap(boolean filter)

注意不要混淆,前者是边缘的抗锯齿,后者则是位图缩放或旋转的抗锯齿。

see also:

http://developer.android.com/reference/android/graphics/Paint.html

void setDither(boolean dither)

则是用于设备与源不同色深时的像素处理方式,和抗锯齿(实际上是抗色带)有关。

see also:

http://www.codeandweb.com/texturepacker/features

 

 

二、OpenGL ES

Android的三维渲染引擎

http://www.khronos.org/opengles/

 

(20130317)

 opengles-book-samples

Android GLES 2.0示例代码(跨平台)

https://code.google.com/p/opengles-book-samples/

 

 

 

三、Renderscript

Android的高性能三维渲染语言

http://developer.android.com/guide/topics/renderscript/index.html

 

 

 

 

 

四、AndEngine

自由的Android 2D OpenGL游戏引擎

http://www.andengine.org/

 

1. Texture disappears问题(纹理消失)

http://www.andengine.org/forums/development/texture-disappears-t4294.html

http://www.andengine.org/forums/bugs/texture-disappears-t3962.html

这个问题出现在渲染一个场景较长时间(?)。

解决办法是关闭VBO:

 

 

EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), mBoundCamera);
 
engineOptions.getRenderOptions().disableExtensionVertexBufferObjects();
engineOptions.getTouchOptions().setRunOnUpdateThread(true);
 
this.mEngine = new Engine(engineOptions);
               
return this.mEngine;

 

2. setAlpha的问题

使用setAlpha之前需要设置混合函数:

 

 

bg.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

 

因为默认下的混合函数不符合图层混合的效果(和背景色混合,而非下面的那个图层)。

用于制作透明度动画时要注意这个问题。

 

五、libGDX

Desktop/Android/HTML5 Java游戏开发框架

http://libgdx.badlogicgames.com/

http://code.google.com/p/libgdx/

  

 (20130314)

lwjgl-basics

 https://github.com/mattdesl/lwjgl-basics/wiki

gles和glsl相关教程,示例代码可以移植到libgdx上(lwjgl为后端)

讲解比较详细,推荐。

 

(20130606)

对于官方的IDE:adt-bundle,通常需要一个Java工程(可运行PC版)和一个Android工程(可运行在Android上)。

注意:Android工程是依赖于Java工程,而且需要在工程属性->Java Build Path->Order and Export中勾选依赖的Java工程(否则,运行时会提示找不到类)

 

另外,由于相同的原因,如果libgdx的jar文件放在libs目录下,会自动链接到类路径中,不过问题是无法指定源代码jar,也就是说,无法在编辑器中跳转至源代码(例如gdx-sources.jar)。

 

解决办法是gdx.jar和gdx-backend-android.jar及其源码jar包不要放在libs目录下,而是用Java工程的方式加入编译类路径,然后用上面的方法,在工程属性->Java Build Path->Order and Export中勾选这些jar。这样,既可以指定xxx-sources.jar的源码jar,同时也能保证编译到apk包中。

 

(20131207)

libgdxメモ(日语)

http://doc.tir.ne.jp/devel/clan/libgdx

 

(20131208)

官方wiki

https://github.com/libgdx/libgdx/wiki

 

=================

 

(20130905)

 六、JNI

1. image buffer控制

参考自:

https://vec.io/posts/how-to-render-image-buffer-in-android-ndk-native-code

 

1.1 Java Surface JNI

 

private Bitmap mBitmap;
private ByteBuffer mByteBuffer;

private ByteBuffer surfaceInit() {
  synchronized (this) {
    mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);
    mByteBuffer = ByteBuffer.allocateDirect(w * h * 2);
    return mByteBuffer;
  }
}

private void surfaceRender() {
  synchronized (this) {
    try {
      Canvas c = mSurface.lockCanvas(null);
      mBitmap.copyPixelsFromBuffer(mByteBuffer);
      c.drawBitmap(mBitmap, 0, 0, null);
      mSurface.unlockCanvasAndPost(c);
    } catch (Exception e) {
    }
  }
}

private void surfaceRelease() {
  synchronized (this) {
    mBitmap.recycle();
    mBitmap = null;
    mByteBuffer = null;
  }
}

 

static jbyte* g_buffer;

bool jni_surface_init(JNIEnv* env) {
  jobject buf = (*env)->CallObjectMethod(env, javaClass, javaSurfaceInit);
  if (buf == NULL) return false;
  
  g_buffer = (jbyte*)(*env)->GetDirectBufferAddress(env, buf);
  if (g_buffer == NULL) return false;

  return JNI_VERSION_1_6;
}

void jni_surface_release(JNIEnv* env) {
  (*env)->CallVoidMethod(env, javaClass, javaSurfaceRelease);
  g_buffer = NULL;
}

void jni_surface_render(JNIEnv* env, uint8_t* pixels, int w, int h) {
  if (g_buffer != NULL) {
    memcpy(g_buffer, pixels, w * h * 2); // RGB565 pixels
    (*env)->CallVoidMethod(env, javaClass, javaSurfaceRender);
  }
}

 

 1.2 OpenGL ES 2 Texture

 

 1.3  NDK ANativeWindow API

 

ANativeWindow* window = ANativeWindow_fromSurface(env, javaSurface);

ANativeWindow_Buffer buffer;
if (ANativeWindow_lock(window, &buffer, NULL) == 0) {
  memcpy(buffer.bits, pixels,  w * h * 2);
  ANativeWindow_unlockAndPost(window);
}

ANativeWindow_release(window);

 

1.4 Private C++ API

写道
Android teams don’t recommend to use the private interfaces hidden in Android source code, so it’s up to you to choose whether to use this method. As I know, many famous Apps have choosen this method, such as Flash, Firefox, VPlayer, MX Player and VLC for Android.

 

 

#ifdef FROYO
#include "surfaceflinger/Surface.h"
#else
#include "ui/Surface.h"
#endif

using namespace android;

jclass surfaceClass = env->FindClass("android/view/Surface");
if (surfaceClass == NULL) return;

jfield fid = env->GetFieldID(surfaceClass, "mSurface", "I");
if (fid == NULL) return;

sp<Surface> surface = (Surface*)env->GetIntField(javaSurface, fid);

Surface::SurfaceInfo info;
if (surface->lock(&info) == 0) {
  memcpy(info.bits, pixels,  w * h * 2);
  surface->unlockAndPost();
}


 

 

写道
As you can see, the procedure used here is very similiar to the ANativeWindow one. But it’s a bit hard to build this code snippet, because you need to setup proper LOCAL_C_INCLUDES and LOCAL_C_LIBS in your Android.mk file. For the header files, you’d better to clone the Android source code. For the shared libs libgui.so and libsurfaceflinger_client.so, you can pull them off from a real Android device or Android emulator.

The performance in this method is also the same as the ANativeWindow one.

 

 

(TODO)

 

分享到:
评论

相关推荐

    JDK+ANDROID SDK +ADT+ECLIPSE 下载与安装

    4、在Eclipse中安装ADT插件 打开Eclipse,进入“Help”菜单,选择“Install New Software”。在弹出的窗口中,点击“Work with”下拉框,选择“Add”。在弹出的对话框中,输入ADT插件的仓库地址:...

    adt和sdk安装步骤

    勾选你想要安装的版本,例如Android 4.4(KitKat)或更高版本,以及对应的SDK Platform和System Image。同时,你也可以选择安装其他必要的工具,如Build Tools。点击“Install X packages...”,然后在弹出的对话框...

    android环境配置2018+eclipse+adt+jdk+sdk

    这篇指南将详细介绍如何在2018年配置基于Windows操作系统的Android开发环境,包括Eclipse IDE、Android Development Toolkit (ADT)、Java Development Kit (JDK) 和 Android Software Development Kit (SDK)。...

    android 环境开发需要的sdk ADT 文件下载

    4. **安装Eclipse和ADT**:下载Eclipse IDE,然后在Eclipse Marketplace中搜索并安装ADT插件。确保ADT版本与SDK版本匹配,以避免兼容性问题。 5. **创建AVD(Android Virtual Device)**:通过AVD Manager创建一个...

    JDK_+_Eclipse_+_Android_SDK_+_ADT_的安装、配置

    本文将详细介绍如何安装和配置JDK、Eclipse、Android SDK以及ADT插件。 首先,我们需要安装Java Development Kit (JDK)。JDK是Java编程语言的基础,它包含了编译器、调试器和其他必要的工具,使得开发者能够编写、...

    Eclipse搭建Android开发环境图文教程(eclipse+ADT插件+Android SDK)

    - 也可以选择安装 Android SDK Tools 和 Android SDK Platform-Tools。 ##### 5.4. 配置 Android SDK 环境变量 - 在系统环境变量中新建 `ANDROID_HOME`,变量值为 Android SDK 的安装路径。 - 修改 `Path` 变量,...

    SDK和ADT对应关系

    而ADT(Android Developer Tools)是集成开发环境(IDE)Eclipse中的一个插件,专门用于Android应用开发,它提供了图形化的用户界面,用于创建、编辑和管理项目,以及调试代码。 Android SDK包括两个主要部分:SDK ...

    最详细的android-adt安装

    本文详细介绍了 Android ADT 的安装过程,包括安装 ADT、安装 Android SDK、解决 adb.exe 缺失问题、配置 Eclipse 环境和解决 Android 插件安装问题等方面的内容。通过遵循本文的步骤,可以轻松地安装 Android ADT ...

    Android SDK网盘下载

    通过SDK Manager,开发者可以选择需要的API级别,安装相应的SDK Platform、SDK Build Tools、Android Emulator等。 2. **SDK Platforms**: 包含了不同版本的Android操作系统,比如Android 2.3 (Gingerbread)到...

    Android ADT, SDK, SDK_tool等官方下载链接(12.08.17更新)

    ADT(Android Development Tools)插件是Eclipse IDE的一个插件,用于简化Android应用程序的开发流程。虽然如今更推荐使用Android Studio,但ADT依然为老项目的维护提供了便利。 #### 八、Android NDK NDK(Native ...

    mac 10.12.6 adt bundle损耗,使用原生eclipse安装adt下载

    打开SDK Manager(在Eclipse的"窗口" -&gt; "Android SDK Manager"),勾选想要的Android版本及其对应的平台工具和build-tools,然后点击“安装包”(Install Packages)按钮进行下载安装。 至此,我们就成功地在Mac ...

    Android-64-SDK.rar开发环境配置eclipse

    总之,配置`Android-64-SDK.rar`与Eclipse的开发环境涉及解压SDK、设置环境变量、集成SDK到Eclipse、安装ADT插件、创建项目、使用AVD管理器以及进行开发和调试。虽然当前Android Studio已成为主流开发工具,但理解这...

    Android SDK 2.3与Eclipse最新版开发环境搭建

    在进入Android应用开发的世界之前,首先需要正确地搭建Android SDK 2.3和Eclipse的开发环境。这个过程虽然看似繁琐,但遵循正确的步骤,你可以轻松完成。以下是一份详细的搭建指南,旨在帮助你顺利开始Android编程之...

    如何在eclipse中添加android ADT

    为了在Eclipse中进行Android应用开发,我们需要安装Android Development Toolkit (ADT) 插件。ADT提供了针对Android开发的集成工具,包括代码编辑、调试、构建和测试等功能。 以下是如何在Eclipse中添加Android ADT...

    android-21 SDK

    安装和配置Android-21 SDK后,开发者可以创建AVD来模拟Android 5.0设备,测试应用在不同配置下的行为。此外,利用SDK Manager工具,开发者可以更新SDK组件,获取新版本的API和工具。 总之,"android-21 SDK"对于想...

    最详细的Android SDK下载安装及配置教程.pdf

    ### Android SDK 下载安装及配置教程 #### 第一步:安装 JDK **背景介绍:** 进行 Android 开发前,首先需要确保 Java 开发工具包 (JDK) 的正确安装。这是因为 Android 开发工具如 Eclipse 和 Android Studio 均...

    Android SDK (SDK Platforms Preview)-android-S.zip

    6. **ADT Bundle**: 虽然现在Google推荐单独下载和管理SDK组件,但在过去,ADT Bundle(Android Developer Tools Bundle)包含了Eclipse IDE和Android SDK,使得开发者可以一站式获取所有必要的开发工具。...

    Android2.3.3_SDK_安装_Eclipse3.7.1[归纳].pdf

    在本文中,我们将详细讨论如何在Windows环境下安装Android 2.3.3 SDK,并与Eclipse 3.7.1集成。首先,我们需要确保具备必要的软件环境,即Java Development Kit (JDK)。JDK 1.5及以上版本是安装Android SDK的基础,...

    Windows10下JDK eclipse与SDK及ADT的配置

    在Windows 10环境下配置JDK(Java Development Kit)、Eclipse集成开发环境以及Android SDK(Software Development Kit)和ADT(Android Development Tools)是进行Java和Android应用开发的重要步骤。以下是详细配置...

Global site tag (gtag.js) - Google Analytics