一.结合eclipse和NDK的JNI开发流程
- 1.新建Android工程,声明本地方法
- 2.指定工程添加 add Native suport,修改其中源文件后缀为.c,在Android.mk文件中也要修改,
- 3.指定jni.h头文件路径
- 4.进入工程src目录执行javah命令(jdk1.7),进入工程bin\classes执行javah。把jni函数声明拷贝到.c源文件中
- 5.实现本地jni函数
- 6.在调用类中加载动态库
二.代码
package com.itheima.cpag;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity
{
static
{
System.loadLibrary("encrypt-jni");
}
EditText et_cardnum;
EditText et_password;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_cardnum = (EditText) findViewById(R.id.et_cardnum);
et_password = (EditText) findViewById(R.id.et_password);
}
public void login(View view)
{
String cardnum = et_cardnum.getText().toString().trim();
String password = et_password.getText().toString().trim();
if(TextUtils.isEmpty(cardnum) || TextUtils.isEmpty(password))
{
Toast.makeText(this, "卡号或密码不能为空", Toast.LENGTH_SHORT).show();
}
//模拟逆置加密 123456 -- 654321
int en_cardnum = encode(Integer.parseInt(cardnum));
System.out.println("加密卡号 , 加密后卡号:" + en_cardnum);
int en_password = encode(Integer.parseInt(password));
System.out.println("加密密码 , 加密后密码:" + en_password);
System.out.println("连接服务器。。。。");
}
public native int encode(int num);
}
com_itheima_cpag_MainActivity.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_itheima_cpag_MainActivity */
#ifndef _Included_com_itheima_cpag_MainActivity
#define _Included_com_itheima_cpag_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_itheima_cpag_MainActivity
* Method: encode
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_com_itheima_cpag_MainActivity_encode
(JNIEnv *, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif
encrypt-jni.c
#include <jni.h>
JNIEXPORT jint JNICALL Java_com_itheima_cpag_MainActivity_encode
(JNIEnv *env, jobject obj, jint jnum)
{
return jnum + 8;
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := encrypt-jni
LOCAL_SRC_FILES := encrypt-jni.c
include $(BUILD_SHARED_LIBRARY)
layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<EditText
android:id="@+id/et_cardnum"
android:hint="请输入卡号"
android:inputType="number"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/et_password"
android:hint="请输入密码"
android:inputType="numberPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:onClick="login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登陆" />
</LinearLayout>