JNI学习笔记(小案例开发)

一.结合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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

The_Web3_社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值