Android
文章平均质量分 82
scott.cgi
要么编程,要么被编程,编程是一种超能力
展开
-
No cached version of com.android.tools.build:gradle 3.6.1 available for offline mode解决方法
在Mac上的解决方法,按照以下步骤操作:第一, 在项目的build.gradle中添加 classpath 'com.android.tools.build:gradle:3.6.1' 。第二, 在gradle-wrapper.properties中,添加distributionUrl=https\://services.gradle.org/distributions/gradle-6.2....原创 2020-03-08 21:28:28 · 8359 阅读 · 11 评论 -
Android studio 2.2 使用 cmake 编译 libpng
使用Android studio结合cmake来编译libpng,踩了若干坑才编译成功。首先,去libpng官网下载最新的源代码 http://www.libpng.org/pub/png/libpng.html ,源代码里面有自己的cmake文件,不要用这个整合到studio里面,因为这个文件内容太多太复杂报错很难定位。然后,我们使用studio创建一个新的带有c++ suppo原创 2017-03-10 22:21:25 · 3332 阅读 · 5 评论 -
Android studio ndk配置cmake开发native C
Android 2.2 以后的版本对NDK的支持已经非常好了。最近把一个纯C的android项目,从eclipse ADT迁移到Android studio上。本文是参考Add C and C++ Code to Your Project 官方文档(需要翻墙),经过各种尝试之后的总结。Android studio整合NDK开发,有两种模式,一种是ndk build,一种是cma原创 2017-03-10 22:38:24 · 4070 阅读 · 1 评论 -
NDK GLES2.0动态加载GLES3.0的原理
OpenGL ES3.0是兼容2.0的,这样从代码层面就可以,使用ES3.0的库写出兼容ES2.0的代码,通过判断在ES2.0上避免调用3.0的特性就可以了。但是Android studio的工程需要设定API platform的版本,ES3.0的版本apk无法安装在ES2.0的设备上。而在ES2.0的平台上,无法连接ES3.0的函数。所以,这里就需要动态加载ES3.0的函数,在ES2.0的平原创 2017-03-10 22:03:10 · 3913 阅读 · 0 评论 -
Android NDK 使用JNI调用java代码,通用代码封装
本文主要介绍一下内容:配合NDK NativeActivity封装jni调用需要的环境参数获取静态和非静态java方法信息的封装调用静态和非静态java方法的封装获取apk签名的jni调用封装首先,我们需要获取,jni最重要的环境对象。#include #include extern ANativeActivity* nativeActivity;static inl原创 2017-05-15 19:03:06 · 1165 阅读 · 0 评论 -
Android OpenGL ES2 一切从绘制纹理开始
android openGL ES2 一切从绘制纹理开始原创 2014-08-09 16:49:27 · 4442 阅读 · 0 评论 -
Eclipse ndk插件正确索引纯C文件
eclipse的NDK插件可以把android工程转换成原创 2014-11-24 11:45:48 · 1305 阅读 · 3 评论 -
Eclipse NDK debug native code 失败的问题解决
NDK debug native code 官方说明在这里 http://tools.android.com/recent/usingthendkplugin,官方插件有一个bug没有修复。就是cpp文件可以正确的在eclipse中检索到头文件的定义,c文件就不可以正确的引用头文件。这个问题在eclipse4.2,CDT8.1中存在。以前的版本评论说eclipse3.8版本没有。还有一个bug在A原创 2014-08-08 16:41:21 · 977 阅读 · 0 评论 -
Eclipse ndk support无法正确索引c文件的解决办法
eclipse ndk 添加了native support之后,就可以在android工程中调试使用native code, 甚至可以在eclipse cdt中debug natvie code。官方的配置方法:http://tools.android.com/recent/usingthendkplugin但NDK的插件有一个bug,就是使得CDT无法识别android gcc tool原创 2014-08-08 09:40:43 · 1979 阅读 · 0 评论 -
「游戏引擎Mojoc」(6)NDK替换android_native_app_glue的实现
Android NDK开发native app官方提供了一个胶水层,android_native_app_glue,NDK的demo里给出了示例,如何使用胶水层开发native activity。但我发现这个胶水层不好,过于复杂,过度封装,代码质量不高。于是经过研究,直接使用ANativeActivity的接口,重写一个自己的胶水层。Mojoc里重写的层是NativeGlue.c,经过测试完全没有问原创 2017-10-23 10:34:52 · 993 阅读 · 1 评论 -
C语言调用jni中JNIEnv指针使用和理解
使用C语言调用jni的时候,需要和java的环境对象和虚拟机对象交互。它们的C语言定义如下。typedef const struct JNINativeInterface* JNIEnv;typedef const struct JNIInvokeInterface* JavaVM;可以看到,JNIEnv和JavaVM是一个指针内心。其结构体包含了很多我们需要用的函数指针: j原创 2017-04-04 22:59:56 · 6507 阅读 · 0 评论 -
「游戏引擎Mojoc」(10)Android NDK通用JNI调用Java代码封装
Mojoc提供了一个通用的工具类,来调用Android Java代码,以实现特定平台的功能。这个工具类封装了JNI使用的繁琐细和上下文对象的获取,提供了简单直接的API专注于Java类和方法的访问,并且实现了任意类型Java方法的调用。本文将会介绍以下几点:NDK NativeActivity的JNI上下文对象获取。JNI中JNIEnv指针的使用和理解。根据路径获取Java类对象。...原创 2018-05-20 20:19:56 · 507 阅读 · 0 评论 -
Android 报错 E/libEGL: validate_display:99 error 3008 (EGL_BAD_DISPLAY) 问题的解决
在自己手动调用OpenGL的程序里,logcat总是显示E/libEGL: validate_display:99 error 3008 (EGL_BAD_DISPLAY)错误,但是不会影响程序正常的运行。在网上所搜了半天,不少人都遇到了这个问题,但都没有给出确切的原因和答案。经过一番断点排查,最终我定位到了这个错误提示的根源所在:当EGL没有初始化完成的时候,就调用了OpenGL的函数,就会...原创 2018-12-28 14:24:01 · 17663 阅读 · 2 评论 -
Android OpenSLES error “too many objects” 和 “Error after prepare: 1” 问题的解决方式
在使用NDK直接调用OpenSLES实现音频的时候,很容易出现以下两种错误:(1) E/libOpenSLES(25131): Too many objects(2) E/libOpenSLES: Error after prepare: 1第一个, 是SLPlayItf对象没有及时销毁,不同的平台SLPlayItf同时支持的数量不同,大约是2-10左右,所以音频播放完成之后,需要及时销毁...原创 2019-03-08 20:50:10 · 1260 阅读 · 0 评论 -
Android studio使用ndk native c调用OpenSLES播放声音
本文介绍一下内容:介绍OpenSLES API如何使用使用过程中遇到的问题解决Android studio的一些配置本文是在研究了NDK官方的例子后的总结,native-audio,官方demo中有一些问题,每个手机的支持程度有不太一样,总之这套API给我的感觉是不太稳定。将就着能用,对于纯native的项目来说,可以不用jni回调java代码是唯一的好处。因为IOS并不支持Ope原创 2017-03-20 20:54:09 · 4725 阅读 · 2 评论 -
Android Studio使用cmake配置c++开发Admob
使用c++开发Admob可以构建跨平台的广告集成体验,不用为不同平台编写原生语言的广告集成代码,也更加方便纯native开发的软件进行广告植入。通过官方教程和demo的研究, 踩了若干坑之后,终于在native code构建的游戏里顺利集成了c++接口的Admob。文本将会详细介绍,集成过程和遇到的问题及解决方法。首先,查看官方教程。注意点,不要看中文的页面介绍,因为版本配置包括sdk原创 2017-03-10 23:08:52 · 3166 阅读 · 0 评论 -
NDK在windows下编译libpng
首先要去下载libng的源码: http://www.libpng.org/pub/png/libpng.html 最新版本是 1.5.13, 下载后解压到目录。NDK打包需要固定的目录结构的,很简单。我的版本解压后是lpng1513,在这个目录下面建立文件夹jni,以后把其他的书有文件都剪切到jni下面。并且在jni下面创建Android.mk文件。内容如下:LOCAL_PA原创 2014-08-09 10:02:12 · 1513 阅读 · 0 评论 -
在NDK中使用libpng读取pixel数据
libpng的详细使用方法在于它的官方文档libpng-manual.txt,下载文件夹下含有。使用openGL生成纹理的时候需要图片的像素数据。使用libpng可以帮助我们解析PNG标准格式的结构,获得pixel数据。在NDK中读取assets文件夹内容的方法在头文件#include 中定义。直接看代码:/** * Read png pixel data from file,原创 2014-08-08 17:27:16 · 2115 阅读 · 0 评论 -
NDK编译cpp和c文件
NDK会自动编译LOCAL_SRC_FILES目录指定的cpp或c文件。如果是cpp会自动用c++编译器,如果是c那么自动用c编译器。mk文件有一个LOCAL_CPP_EXTENSION属性,设置的是用c++编译的文件后缀。下面是官方描述:Note that the default extension for C++ source files is '.cpp'. It isho原创 2014-08-09 10:01:38 · 4459 阅读 · 0 评论 -
NDK读写assert资源文件
使用NDK访问android的文件系统,大部分方式是使用jni回调java的代码以后来操作。可是如果是使用了NativeActivity应该怎么办,按照官方的例子,是没有自己写的一行java代码的又如何去jni,如果用了jni也破坏了NativeActivity的意义。阅读NDK提供的头文件会发现头文件:原创 2014-08-08 09:55:28 · 1838 阅读 · 0 评论 -
NativeActivity 使用那个 Tracer for OpenGL ES
Tracer for OpenGL ES 是 android 官方推出的openGL性能分析器。官方文档: http://developer.android.com/tools/help/gltracer.html第一,这个分析器只能在真机上运行。第二,真机必须4.1以上,即是API level 16 以上第三,ADT 需要 21 版本以上麻烦的是,这个分析器需要填写,原创 2014-08-08 10:36:03 · 1659 阅读 · 3 评论 -
NDK编译错误Unknown Application ABI,Unable to detect application ABI’s
出现这个错误,有2个可能:第一个就是,eclipse的NDK目录没有指向,NDK的文件夹。第二就是,NDK_MODULE_PATH目录没有正确设置。首先这是一个环境变量,NDK编译的时候去搜索这个值。* Due to GNU Make limitations, NDK_MODULE_PATH must not contain any space. The NDK wi原创 2014-08-09 09:46:04 · 1627 阅读 · 0 评论 -
Android NativeActivity事件处理帧率下降问题的原因
如果使用了NativeActivity,那么事件原创 2014-10-07 20:56:08 · 1325 阅读 · 0 评论 -
NDK 使用 addr2line 定位 Fatal signal (SIGSEGV) 错误
使用NDK编写native code时候,真机常会出现crash的错误。然后logcat就是一片错误堆栈。I/DEBUG ( 2562): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 40123d5cI/DEBUG ( 2562): backtrace:I/DEBUG ( 2562): #00 pc 0原创 2015-07-07 14:52:23 · 8222 阅读 · 0 评论 -
NativeActivity的胶水层android_native_app_glue详解和使用
使用NativeActivity可以完全不使用java代码,全部使用native code来开发android程序。NativeActivity 为我们定制了native代码的各种接口回调,在ndk的samples里面,提供了一个例子如何使用NativeActivity。我们会发现,demo中使用了一个胶水层“android_native_app_glue.h”封装了native层面的ANativ原创 2016-02-06 23:15:42 · 8705 阅读 · 3 评论 -
替换android_native_app_glue实现, 直接使用ANativeActivity回调
NDK为我们提供了胶水层android_native_app_glue,但我们现在要抛弃它,我们能够有一个更简单更有效率的玩法。替换思路如下:直接使用ANativeActivity事件回调,放弃使用Looper的方案 input.h和senor.h提供的接口中,必须使用Looper,所以还是会初始化一个Looper Looper使用回调函数模式 首先,ANativeActi...原创 2016-02-07 23:25:03 · 3409 阅读 · 7 评论 -
Android 前后台切换与OpenGL(EGL)创建销毁的周期
EGL的创建是这样的。/** * Creates an EGL rendering context and all associated elements */void CreateEGL(EGLNativeWindowType window, EGLDisplay* outDisplay, EGLContext* outContext, EGLSurface* outSurface,原创 2016-02-08 23:53:17 · 5984 阅读 · 2 评论 -
NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决
一直都是编译armabi的,没有任何问题,这个架构是软件模拟浮点运算的。后来看到NDK文档上说armabi-v7a是针对有硬件处理浮点计算的arm cpu的。于是就修改配置编译armebai-v7a的so文件。结果是编译没问题,一运行就是crash掉,Fatal signal 7 (SIGSEGV)错误。进过排查才发现,crash掉的仅仅是对一个浮点变量赋值而已。原创 2015-07-08 14:28:10 · 2947 阅读 · 0 评论 -
NDK 获得精确时间模拟System.nanoTime()
NDK 提供了POSIX:原创 2014-08-08 10:03:11 · 3555 阅读 · 0 评论