是否有可能用C/C++编写一个完整的NDK应用程序而没有像hello-jni示例项目(HelloJni.java)中的Java"启动"类 - 以某种方式创建一个HelloJni.c,它会做同样的事情吗?
我有一个支持OpenGl ES 2.0(HTC Desire)的设备,当然在设备上部署app比在模拟器上快得多.默认的android模拟器不支持2.0,androidX86项目和类似的androbox项目不支持本机代码(NDK)所以即使Hello-Jni崩溃它们(所有样本在标准AVD上工作正常除了Hello-GL2样本ofc),不知道支持他们是否是OpenGL ES 2.0,请告诉我.
因此,如果有本地方式(NDK)的开发支持OpenGl 2.0 - 如何在没有设备的情况下测试应用程序?
对不起,对不起.如果你愿意,可以跳过关于编译Lua的部分内容(几乎可以),直接回答最后一个问题.
让我们编译Lua库就像Android的静态库一样.
下载最新的源代码并查看doc/readme.html - 在其他系统上构建Lua部分以获取要编译的文件列表.
当然看看makefile - 看看我们必须设置平台标志,例如linux,bsd等.但当然没有Android平台,所以我们可以选择将平台设置为ANSI,Linux,Posix或Generic.
第一个问题:它构建正常(有关llex.c的一个例外,我将在下面描述),即使没有任何平台标志,所以这可能是不必要的?
我设置ANSI标志.
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := lua
LOCAL_CFLAGS := -DLUA_ANSI
LOCAL_SRC_FILES := lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c loadlib.c linit.c
include $(BUILD_STATIC_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
Application.mk
APP_MODULES := lua
APP_PLATFORM := android-8
APP_OPTIM := release
APP_ABI := armeabi
Run Code Online (Sandbox Code Playgroud)
并且当然有错误
Compile thumb : lua <= …Run Code Online (Sandbox Code Playgroud) 我是bash脚本的新手,但我不理解为什么它不起作用
#!/bin/bash
foo=foobarfoobar
echo ${foo//bar/baz}
Run Code Online (Sandbox Code Playgroud)
第3行的错误替换错误
在今天之前,我使用Eclipse 3.8和Sequoyah插件进行Android NDK项目.但今天我决定用Eclipse和NDK刷新Eclipse到Juno的版本.
我非常高兴然后在ADT安装中看到Android Native Tools,它将像Sequoyah一样完成同样的工作,但具有调试功能.
我创建了新的Android项目来测试它.
添加Android Native Support会创建带有Android.mk,.cpp文件的jni文件夹,与Sequayah一样.然后我得到第一个没有得到解决,以jni.h.我得到Sequoyah的类似错误,所以我重建索引并重新启动Eclipse.重新启动后它不会消失.
我在C/C++属性中转到Paths And Symbols.但是,所有需要内置的包括.
(NDK PATH)/ platforms/android-8/arch-arm/usr/include - 有jni.h,log.h等
我尝试添加额外的dublicate包含到jni.h,清理项目,重启,重建索引,将.ccp更改为.c,它仍未解决.我在错误日志中没有错误,但在jni函数的编辑器中出现语法错误.
NativeLib.java
package com.aristarhys.glow;
public class NativeLib
{
private static final String NATIVE_LIB = "glow";
static
{
System.loadLibrary(NATIVE_LIB);
}
private NativeLib(){};
public static native void test();
}
Run Code Online (Sandbox Code Playgroud)
glow.h
#ifndef GLOW_H_
#define GLOW_H_
#include <jni.h> //unresolved
//syntax error
JNIEXPORT void JNICALL Java_com_aristarhys_glow_NativeLib_test(JNIEnv* env, jclass cls);
#endif /* GLOW_H_ */
Run Code Online (Sandbox Code Playgroud)
log.h
#ifndef LOG_H_
#define LOG_H_
#include …Run Code Online (Sandbox Code Playgroud) 那么,FBO的使用范围很广,它有助于使复杂的效果更容易.我设置FBO并绘制它,然后渲染FBO纹理四边形,没有任何问题,甚至测试简单的屏幕处理颜色着色器.但是我为FBO渲染的一切都因为某些原因而颠倒过来.如果我渲染到库存屏幕FBO一切正常,我甚至不执行任何旋转精灵.
FBO创作
typedef struct tex
{
dim2i size; // int width, int height
GLuint id;
} tex;
typedef struct fbo
{
GLuint frame_buffer;
tex buffer_tex;
}fbo;
void set_fbo(fbo* res, int width, int height)
{
GLint tex_size;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &tex_size);
GLint render_buffer_size;
glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, &render_buffer_size);
LOGI("Max render buffer size: %d, max texture size: %d", render_buffer_size, tex_size); //max render buffer size: 3838, max texture size: 2048
glGenFramebuffers(1, &res->frame_buffer);
GLuint depth_buffer;
glGenRenderbuffers(1, &depth_buffer);
glGenTextures(1, &res->buffer_tex.id);
res->buffer_tex.size.w = width;
res->buffer_tex.size.h = height;
glBindTexture(GL_TEXTURE_2D, res->buffer_tex.id);
glTexImage2D(GL_TEXTURE_2D, 0, …Run Code Online (Sandbox Code Playgroud) 我尝试通过将测试数据从测试用例setUp()放到setUpClass()/teardownClass类方法来加速我的测试,因此它不会为测试用例中的每个测试重新创建相同的仅选择夹具.
@classmethod
def setUpClass(cls):
plant.StuffFactory() #plant stuff with FactoryBoy
transaction.commit()
@classmethod
def tearDownClass(cls):
session.query(models.Stuff).delete() # delete planted stuff
transaction.commit()
Run Code Online (Sandbox Code Playgroud)
但我不喜欢自己删除session.delete的东西,因为我使用了很多模型而不想跟踪我种植的内容.我想要类似的东西
@classmethod
def tearDownClass(cls):
session.clear() #delete all
transaction.commit()
Run Code Online (Sandbox Code Playgroud)
但是session.close()或session.remove()不会影响提交的数据.所以我寻求某种方式"取消",setUpClass transaction.commit()就像我不种植任何东西.
我尝试嵌套事务和保存点,但它们只有在尚未提交数据的情况下才能工作.
有什么指针吗?
我尝试将counter_cache添加到User以计算自有项目.
用户有很多项目,Project有很多用户,但Project属于其中一个.
所以我写了一个迁移,为counter_cache添加额外的计数字段.
评论没有问题reset_counter.
但User.reset_counters user.id, :projects提出NoMethodError:未定义的方法`counter_cache_column'为nil:NilClass.
项目上的counter_cache也正常工作.如果我添加额外的项目,它将增加projects_count字段,如果我删除一个 - 减少.
楷模
class User < ActiveRecord::Base
has_many :projects, :through => :team_members
has_many :team_members
class TeamMember < ActiveRecord::Base
belongs_to :user
belongs_to :project
class Project < ActiveRecord::Base
has_many :users, :through => :team_members
has_many :team_members
belongs_to :leader, :class_name => :User, :counter_cache => true
class Comment < ActiveRecord::Base
belongs_to :user, :counter_cache => true
Run Code Online (Sandbox Code Playgroud)
移民
class AddCounters < ActiveRecord::Migration
def up
add_column :users, …Run Code Online (Sandbox Code Playgroud) 第一个 - 是默认情况下已经定义的NDEBUG,因此断言在#undef之前不起作用.第二个 - 他们工作,但我没有收到DDMS登录.
如果有一些特定于android的assert.h?
或者我只是做错了什么?
我使用libzip处理zip文件,然后一切正常,直到需要从zip读取文件,我只需要读取整个文本文件,因此实现类似PHP的“ file_get_contents”功能非常好。
要从zip读取文件,有一个函数
“ int zip_fread(struct zip_file * file,void * buf,zip_uint64_t nbytes)”。
主要问题是我不知道buf的大小必须为多少,我必须读取多少nbytes(好吧,我需要读取整个文件,但是文件大小不同)。我只是可以做一个大的缓冲区来适合他们所有并读取所有它的大小,或者做一个while循环直到fread返回-1,但是我认为这不是合理的选择。