[Android开发环境搭建问题]android 官网之前发布过ADT版本的Eclipse,建议使用官网提供的集成开发环境IDE(已上传附件),即官方已经集成好ADT CDT SDK Eclipse,不需要再做任何的配置,直接解压就可以用了。 但...+阅读
java中内部类以及静态内部类的使用:
public class A { //定义类A
class B{ //定义内部类B
public void m1(){
System.out.println("B类的方法");
}
}
static class C{ //定义静态内部类C
public void f1(){ //内部方法f1
System.out.println("C类的方法");
}
}
public static A dis(){
class D extends A{
public void g1(){ //内部方法g1
System.out.println("D类的方法");
}
}
return new D();
}
public void g1(){
System.out.println("A类的方法");
}
}
class E{
public static void main(String[] args) {
A a = new A();
a.g1();
A.B b = a.new B();
b.m1();
A.C c = new A.C();
c.f1();
A d = A.dis();
d.g1();
}
}
android jni开发需要懂c语言吗
1.先来一个用C写的例子:
(1)hello.c文件。在C中没有引用,传递的env是个两级指针,用(*env)->调用方法且方法中要传入env.
1 #include
2
3 jstring Java_com_example_Hello_hello(JNIEnv* env, jobject thiz) {
4 return (*env)->NewStringUTF(env,"Hello Jni---->C!");
5 }
(2)Android.mk文件,更改后缀名为.c
复制代码
1 LOCAL_PATH := $(call my-dir)
2
3 include $(CLEAR_VARS)
4
5 LOCAL_MODULE := hello
6 LOCAL_SRC_FILES := hello.c
7
8 include $(BUILD_SHARED_LIBRARY)
复制代码
如何在android源码中添加自己的jni方法
1,、 项目实现了一个简单的四则运算,项目的目录层次如下:AndroidManifest.xml Android.mk jni res src资源文件简简单单,一个布局文件,稍后会有demo的下载地址主要记录备忘的内容如下:MainActivity.Java[html] view plain copypublic native int add(int x, int y);public native int substraction(int x, int y);public native float multiplication(int x, int y);public native float division(int x, int y);static{System.loadLibrary("arithmetic");}2、生成lib的名称为libarithmetic.so.注意load的时候写"arithmetic"jni 目录下有两个文件,一个是Android.mk,一个是c++源文件long.cppjni/Android.mk如下:[html] view plain copyLOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE:= libarithmeticLOCAL_SRC_FILES:= \long.cppLOCAL_SHARED_LIBRARIES := \libutilsLOCAL_STATIC_LIBRARIES :=LOCAL_C_INCLUDES += \$(JNI_H_INCLUDE)LOCAL_CFLAGS +=LOCAL_PRELINK_MODULE := falseinclude $(BUILD_SHARED_LIBRARY)3、 注释:LOCAL_PATH(必须定义,而且要第一个定义),宏函数'my-dir', 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录);include $( CLEAR_VARS),CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。
这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的;LOCAL_MODULE_TAGS :=user eng tests optionaluser: 指该模块只在user版本下才编译eng: 指该模块只在eng版本下才编译tests: 指该模块只在tests版本下才编译optional:指该模块在所有版本下都编译LOCAL_MODULE(必须定义),标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。Note:编译系统会自动产生合适的前缀和后缀,例如:arithmetic编译成功后将生成libarithmetic.so库文件LOCAL_SRC_FILES 变量必须包含将要编译打包进模块中源代码文件。不用在这里列出头文件和包含文件。LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名称LOCAL_CFLAG可选的编译器选项,用法之一是定义宏,例如LOCAL_CFLAGS := -Werror作用是编译警告也作为错误信息LOCAL_PRELINK_MODULE:=false,不作prelink处理,默认是要prelink操作的,有可能造成地址空间冲突(这地方目前还不明白) long.cpp源代码如下:[html] view plain copy#define LOG_TAG "LongTest2 long.cpp"#include#include#include "jni.h"jint add(JNIEnv *env, jobject thiz, jint x, jint y){return x + y;}jint substraction(JNIEnv *env, jobject thiz, jint x, jint y){return x - y;}jfloat multiplication(JNIEnv *env, jobject thiz, jint x, jint y){return (float)x * (float)y;}jfloat division(JNIEnv *env, jobject thiz, jint x, jint y){return (float)x/(float)y;}static const char *classPathName = "com/inspur/test2/MainActivity";static JNINativeMethod methods[]= {{"add", "(II)I", (void*)add},{"substraction", "(II)I", (void*)substraction},{"multiplication", "(II)F", (void*)multiplication},{"division", "(II)F", (void*)division},};typedef union{JNIEnv* env;void* venv;}UnionJNIEnvToVoid;static int registerNativeMethods(JNIEnv* env, const char* className,JNINativeMethod* gMethods, int numMethods){jclass clazz;clazz = env->FindClass(className);if (clazz == NULL)return JNI_FALSE;if (env->RegisterNatives(clazz, gMethods, numMethods)GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK){goto bail;}env = uenv.env;env = uenv.env;if (registerNatives(env) != JNI_TRUE){goto bail;}result = JNI_VERSION_1_4;bail:return result;}除了利用 编写native JAVA类,通过javah生成.h文件,根据.h文件编写.c/cpp文件 方法外(名字像老太太的裹脚步,又臭又长,而且不灵活),Android还可以通过引用JNI_Onload方式实现。
jint JNI_onLoad(JavaVM* vm, void* reverced),改方法在so文件被加载时调用。JNI_OnLoad()有两个重要的作用:指定JNI版本:告诉VM该组件使用那一个JNI版本(若未提供JNI_OnLoad()函数,VM会默认该使用最老的JNI 1.1版),如果要使用新版本的JNI,例如JNI 1.4版,则必须由JNI_OnLoad()函数返回常量JNI_VERSION_1_4(该常量定义在jni.h中) 来告知VM。初始化设定,当VM执行到System.loadLibrary()函数时,会立即先呼叫JNI_OnLoad()方法,因此在该方法中进行各种资源的...
以下为关联文档:
android开发之设置桌面壁纸/** * 裁剪图片方法实现 * param uri = Uri.fromFile(new File(path)); */ public void startPhotoZoom(Uri uri ,Context context) { Intent intent = new Intent("com.andr...
Android开发进阶:如何读写Android文件Android AndroidAndroidAndroid 主要有四大组件成: 主要有四大组件成: 主要有四大组件成: 主要有四大组件成: 主要有四大组件成: 主要有四大组件成: Activity Activity Activity、...
java和android的区别面试题两者的区别: 1. Android是一个完备的移动装备操纵体系,由linux操纵体系,中间件,C类库和焦点应用措施构成。 2. java Me是java的一个微型版本,针对移动装备开拓应用措施的开拓包,它...
android开发视频教程看看下面android教程,非常全面详细: 教程1:Android开发视频培训教程 安卓智能系统开发教程 大小:3.5G 教程2:Google Android开发入门与实战视频教程+源码电子书 大小:1GB 教程3:...
Android游戏开发android开发建议你先从java学起,java的好书有很多,但是我建议您先专注研究一本,等把这本吃透了再看其他的就容易的多了 Java类的推荐书籍: HeadFirst java、 Java编程思想、Java...
如何学习Android开发下面就由福州卓跃教育具体介绍Android应用程序开发学习的路线图,先熟悉Java SE编程,能比较熟练的使用Java语言进行编程,熟悉Java语言语法特点,熟悉Java IO、Java线程、网络编程...
如何从android开发转行游戏开发如何从android开发转行游戏开发,适合初学者学习的android游戏开发教程:有段时间我一直在想我喜欢热爱的到底是什么? 想想当初是什么动机或者梦想让我进入这个行业? 我越来越坚定...
请教android开发的问题请教android开发的问题,android开发架构的问题:Android 开发主要分为两类:native APP开发,web APP开发。native APP开发主要调用的都是安卓自带的api进行开发,一般不需要掌握web...
android虚拟菜单键请问在android开发中android虚拟菜单键请问在android开发中,安卓手机如何打开开发人员选项菜单:在最早的安卓系统中,谷歌为安卓设计了4个按键而不是现在的3键,依次为Home键、菜单键、返回键、搜索键...