任何问题请联系WX:uu16853

买模板送网站采集器 让你轻松放开双手运营网站!

购买更多有优惠!

Android JNI学习指导 Android开发技术

  很多网友对Android JNI和C++开发相关的技术很感兴趣,由于JNI大部分技术都是针对Windows PC的,对于Android的JNI学习除了SDK中的一些例子外,其实大家完全可以通过Android源码中的base.git中根目录下的/core/jni文件夹下的cpp和h文件进行学习,这里是Google Android开发团队进行编码,在代码质量和稳定性方面都有保障,这里Android123推荐大家通过这些代码了解底层相关实现细节,虽然是C++的代码不过编码风格还是C的实现,对于基础学习,Android开发来说,开源方面的优势大幅超越封闭的iPhone和Windows Phone,同时对于间接使用Android Dalvik的Ophone OS 3、WebOS来说还是相当好的,当然有兴趣的网友可以移植Dalvik到Meego。

Android JNI实例代码(一) Android开发技术

  前几天Android123有关Android JNI开发系列教程中有关的源代码,可以在本文中查找: 一、 在JNI中执行Java方法 class AndroidJniDemo { private native void executeMethod(); private void show() {  System.out.println("Java cwj print"); //执行了show方法后打印java层的输出 } public static void main(String args[]) {  //这里我们在J2SE中测试,Android开发者可以放到Activity中的onCreate调用  AndroidJniDemo ajd = new AndroidJniDemo();  ajd.executeMethod();  } static {  System.loadLibrary("AndroidJniDemo"); }} 下面是JNI代码: JNIEXPORT void JNICALLJava_AndroidJniDemo_executeMethod(JNIEnv *env, jobject obj){ jclass clazz = (*env)->GetObjectClass(env, obj); //通过类的对象 jmethodID mid = (*env)->GetMethodID(env, clazz, "show", "()V"); //查找java中的show方法的ID,最后的签名符号为void类型 if (mid == NULL) {  return;   //如果方法ID没有找到 }  printf("JNI cwj print"); //从JNI中打印输出 […]

Android JNI实例代码(二) Android开发技术

   我们继续Android JNI开发中的常用代码,第二部分将包含如何在JNI中构造实例化一个Java类以及异常处理的具体方法,有关前一部分的内容可以查看 Android JNI实例代码(一)  。    三、在JNI中构造和实例化Java类  public class AndroidJniDemo4{ public static native void constructClass(); //JNI方法 public static void main(String[] args){  AndroidJniDemo4.constructClass(); }} class CwjThread implements Runnable { int nCount = 0 ; public void run(){  try{   Thread.sleep(1987); //休眠1987毫秒  }catch(Exception e){   e.printStackTrace();  }  System.out.println("Count="+ nCount); }} JNIEXPORT void JNICALLJava_AndroidJniDemo4_constructClass(JNIEnv *env, jclass clazz){ jclass jclazz , cwjclazz;   jmethodID mid , mid2 , runmid ;  jobject obj , obj2 ;  jclazz = […]

Android NDK之JNI使用例子 Android开发技术

  目前Android NDK只能编译出动态库.so文件,并不是能生成.apk文件,这里我们简单介绍下NDK中的Hello JNI列子。整个例子分Java和Native C两个部分。首先是我们常用的Java端调用部分。   package com.example.hellojni; import android.app.Activity;import android.widget.TextView;import android.os.Bundle; public class HelloJni extends Activity{    @Override    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);         TextView  tv = new TextView(this);        tv.setText( stringFromJNI() ); //如果调用失败将会抛出 java.lang.UnsatisfiedLinkError异常        setContentView(tv);    } //注意下面的native关键字     public native String  stringFromJNI();     public native String  unimplementedStringFromJNI();      static {        System.loadLibrary("hello-jni"); //载入hello-jni库    }  } 需要注意的是这里必须设置SDK版本为1.5或以上版本即在androidmanifest.xml文件中指明<uses-sdk […]

Android 1.0不会支持JNI,无缘C++ Android开发技术

Android 1.0最终的版本无法执行本地JNI调用,基本上C++无缘Android开发,这也符合Google给我提供一个Dalvik版的Java原因,虽然最终Android源代码会全部开源,但是整个系统平台会保证安全,从上一版本的SDK已经看到很多bin程序都移除了SQLite3的移除就是一个暗示,提供足够多的Dalvik API可以让我们了解到这些都是为平台安全准备,还有很多android permission和android签名保护机制就是一种间接的ACL保护,不用把时间耽误到这些方面,如果不开发一个类似Android的Linux操作系统,这些似乎不是我们关心的话题。

JNI调用Native C++的so动态库仍然可以 Android开发技术

  目前Android 1.0上仍然可以调用本地的程序,我们发现telnetd、shell这样的程序就是通过JNI调用的Native C++原始的so动态库实现的功能。但是我们自己写的Native C程序在上面执行需要Root权限,上传到系统的System/bin下面也是需要权限的。似乎这些只有在G1的Home+Reject(菜单+挂机)键来实现进入工程模式,通过adb调试接口来替换文件的方式来解决。   考虑了许久这仍然需要漏洞去跳入Root权限用户,目前按照Google的策略是对于Android平台发现漏洞后就会执行强制的更新,最终通过Kill Switch服务器来自动结束恶意程序还是等于白费功夫。否则用户在不更新下会产生安全漏洞,经过特殊构造的攻击程序可以直接威胁Android手机的安全。Android开发网分析后发现JNI调用可以使用Linux系统中现成的命令,比如logcat,获取shell还是可行的。自己做Native应用除非不在Google官方的系统中使用,否则正常用户是不会用这么多步骤或冒风险去安装的,对于最终的部署存在很多问题。同时正常的Native通过res/raw方式部署到market可能会被Google移除。

100% Secure Checkout

PayPal / MasterCard / Visa