学习Android需要掌握Java的知识
一、Java开发需要掌握的基本知识
1、Java分为3个版本,对着企业级应用的J2EE,针对嵌入式设备的J2ME,以及普通的J2SE。如果选择不同的方向,就需要掌握不同的技术。
1.1、桌面应用程序:用JavaSE就够了
1.2、项目开发:JavaEE(J2EE)
1.2.1 JavaEE
1.2.2 软件工程
1.2.3 熟练的java编程技术(JAVA,JSP,JAVABEAN,JAVA SERVLET,XML),
1.2.4 大型数据库编程经验,熟悉基于Oralce,DB2,SqlServer的应用的开发
1.3、J2ME
2、通用的知识需要掌握,比如Java的基本语法,Eclipse,一些简单的设计模式等。
3、网站开发:需要html+CSS+javascript,XML等许多知识。
二、Android应用开发需要掌握的基本知识
Java+sqlite +eclipse +android sdk +模拟器或者android手机
三、Mtk Android平台开发需要掌握的基本知识
1.Java /c /c++ 开发语言知识(底层 +中间层 +上层应用层),Java部分知识参看《Java开发指南2》。
2.Google Android 平台在Java基础上封装的 接口、类及相关Android 平台的相应知识,参看《Android
平台开发之旅》。
3.MTK的release 文档(MTK对Android平台做了一次封装,包括编译、项目组成、驱动集成),参看Mtk release的各平台的code
&doc &tools。
4.如果还需要开发应用部分代码,要求=上述二中所描述,参看android SDK,《hello,android》。
5.如果还需要开发驱动,需要学习 Linux操作系统、Mtk封装的关于驱动部分各平台的code &doc &tools。
随然这个问题可能很多人都没有遇到过,但遇到过的朋友相信和我一样,都经过了一断时间的问题查找才解决,为了减少这样的问题给你带来烦恼,在此我写下此文,希望对大家有所帮助。
你是否在创建JVM是老返回-1,即JNI_ERR;总么检查程序都没有发现任可问题,编译也不会出错。 动态链接库文件“jvm。
dll”已经放到了程序所在目录了,其实问题就出在这里,本来一般的dll文件只要把它放到执行程序目录下就可以正常调用了,但jvm。dll却有所不一样,它还需要调用相对目录下的其它文件,所以你不能单独把jvm。
dll拷贝到exe所在的目录;这样虽然编译均不会报错,但执行是却怎么也创建不了JVM。 正确的做法是,不要把jvm。
dll拷贝到exe所在的目录,而是把“C:\jdk1。5。
0_03\jre\bin\client”(按具体的JDK安装目录和版本进行设置)设到环境变量PATH中,这样问题就可以立即得到解决。
ava的本地调用jni。
调用c为例。在Windows下调用。
dll文件;在Linux下调用。so文件。
1 Java部分:写一个Java调用的方法。 注意:动态库的名字的写法: Windows环境: loadLibrary("libname"); 注意调用的时候要用全名,扩展名可以不写。
Linux环境: loadLibrary("name"); 注意调用的时候不要用全名,要去掉前面的lib和后面的扩展名。 编译Java文件。
然后用Javah 生成。h文件给c程序用。
注意:如果Java文件又包的话,生成的。h是不一样的。
。h中的函数名会带上包名。
例如:cn/common/testlib。Java,生成的。
h中的函数名前面会是:cn_common_testlib。如果没有包,生成的。
h中的函数名就没有cn_common_ 2 写好c程序,编译生成。dll或。
so vc可以直接生成,或用命令行加参数的方法生成。 3 。
dll和。so放置的位置:libname。
dll/libname。so Windows环境: loadLibrary("libname"); 注意调用的时候要用全名,扩展名可以不写。
在环境变量设置PATH=%libname。dll的位置%,这样Java即可找到自己定义的库了。
Linux环境: loadLibrary("name"); 注意调用的时候不要用全名,要去掉前面的lib和后面的扩展名。 在环境变量设置:修改/etc下的profile文件加入这两句: LD_LIBRARY_PATH=libname。
so的位置 export LD_LIBRARY_PATH 或者直接放在%Java_HOME%/jre/lib/i386/下面。
一、从Java调用C++的DLL 1。
创建Java文件 创建名为TestNative的Java文件,注意包名。 package org。
druze。test; publicclass TestNative { publicnativevoid sayHello(); publicvoid sayHello2(){ System。
out。println("Say Hello From Java"); } } 如代码所示,对于sayHello方法声明为native,这一部分将由C++的动态库来实现。
2。 生成class文件 使用javac org/druze/test/TestNative。
java生成class文件 注意:执行该命令在org所在目录执行。 3。
使用javah命令生成相应的C++头文件 使用javah org。druze。
test。TestNative生成名为 org_druze_test_TestNative。
h的头文件 注意:执行该命令在org所在目录执行。 该头文件的内容如下: /* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class org_druze_test_TestNative */ #ifndef _Included_org_druze_test_TestNative #define _Included_org_druze_test_TestNative #ifdef __cplusplus extern "C" { #endif /* * Class: org_druze_test_TestNative * Method: sayHello * Signature: ()V */ JNIEXPORT void JNICALL Java_org_druze_test_TestNative_sayHello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif 4。
创建C++解决方案 此处以VS2008为例。 新建一个VC++的Win32项目,选择如图所示的控制台应用程序。
项目名称为NativeCode。 点击确定后,再点击下一步,出现该页面,应用程序类型选择DLL,附加选项选择DLL 5。
创建号工程之后,将org_druze_test_TestNative。h导入到工程里面,并创建名为source。
cpp的源代码,内容如下: #include"org_druze_test_TestNative。h" #include using namespace std; JNIEXPORT void JNICALL Java_org_druze_test_TestNative_sayHello(JNIEnv *env, jobject obj) { cout } 6。
在工具->选项->项目和解决方案->VC++目录菜单中,平台选择Win32,选择“显示以下内容的目录”为“包含文件”,导入jni。h和jni_md。
h的路径。 7。
编译,生成NativeCode。dll,并将其copy到环境变量PATH的路径下。
8。 修改TestNative。
java package org。druze。
test; publicclass TestNative { publicnativevoid sayHello(); publicstaticvoid main(String[] args) { // 加载动态连接库DLL,如果没有找到的话,则会在运行时报错 System。 loadLibrary("NativeCode"); TestNative tnt = new TestNative(); tnt。
sayHello(); } publicvoid sayHello2(){ System。out。
println("Say Hello From Java"); } } 运行,显示“Hello World!” 9。 注意头文件jni。
h和jni_md。h可以直接导入到工程中也可以。
10。注意NativeCode。
dll必须放置在java命令能访问的路径中。 二、从C++调用Java 1.创建TestNative2。
Java package org。 druze。
test; publicclass TestNative2 { publicstaticvoid testPrint(){ System。out。
println("this is from static method"); } publicstaticint testReturn(){ return 22; } publicstaticint testInput(int number){ return 22+number; } publicint testInstance(int number){ System。 out。
println("this is from instance method"); return 11+number; } }。
[代码] 步骤 #1:使用ANT编译项目 NativeAdd.java01package org.apache;02 03import Android.util.Log;04 05public class NativeAdd {06 static {07 try {08 Log.i("JNI", "Trying to load libNativeAdd.so");09 System.loadLibrary("NativeAdd");10 }11 catch (UnsatisfiedLinkError ule) {12 Log.e("JNI", "WARNING: Could not load libNativeAdd.so");13 }14 }15 16 public static native long add(long a, long b);17} [代码] 下面片断给出主activity中如何调用这个类/方法01public void onClick(View view) {02 Log.i(LOG_TAG, "onClick");03 04 EditText a = (EditText) findViewById(R.id.a);05 EditText b = (EditText) findViewById(R.id.b);06 EditText c = (EditText) findViewById(R.id.c);07 Log.i(LOG_TAG, "calling native method");08 long sum = NativeAdd.add( Long.parseLong(a.getText().toString()),09 Long.parseLong(b.getText().toString()));10 Log.i(LOG_TAG, "back from native method");11 String text = Long.toString(sum);12 c.setText("Native add returns = " + text.subSequence(0, text.length()));13 } [代码] 步骤#2:运行下面的命令产生头文件1javah -classpath ../../Android.jar;../bin/classes; org.apache.NativeAdd [代码] 新产生的头文件“(org_apache_CallNative.h”内容如下01/* DO NOT EDIT THIS FILE - it is machine generated */02#include03/* Header for class org_apache_NativeAdd */04 05#ifndef _Included_org_apache_NativeAdd06#define _Included_org_apache_NativeAdd07#ifdef __cplusplus08extern "C" {09#endif10/*11 * Class: org_apache_NativeAdd12 * Method: add13 * Signature: (JJ)J14 */15JNIEXPORT jlong JNICALL Java_org_apache_NativeAdd_add16 (JNIEnv *, jclass, jlong, jlong);17 18#ifdef __cplusplus19}20#endif21#endif [代码] 步骤#3: 编写C文件如下“org_apache_NativeAdd.c”1#include "org_apache_NativeAdd.h"2 3JNIEXPORT jlong JNICALL Java_org_apache_NativeAdd_add4 (JNIEnv *env, jclass c, jlong a, jlong b)5{6 return a + b;7} [代码] 步骤#5: 编译和连接 org_apache_NativeAdd.c/org_apache_NativeAdd.h为一个共享库.1arm-none-linux-gnueabi-gcc -I/usr/lib/jvm/java-1.5.0-sun/include -I/usr/lib/jvm/java-1.5.0-sun/include/linux -fpic -c org_apache_NativeAdd.c2arm-none-linux-gnueabi-ld -T armelf_linux_eabi.xsc -shared -o libNativeAdd.so org_apache_NativeAdd.o [代码] 步骤 #6: 复制编译文件到模拟器中. 同时安装APK程序.view sourceprint?1adb push native/libNativeAdd.so /system/lib2adb install bin/CallNative.apk 你看下这是我自己做的时候一些经验 ,你看看是否对你有帮助。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:89.789秒