Android 下 JNI 开发

10_在c代码中使用logcat-9

1.Android.mk文件增加以下内容

LOCAL_LDLIBS += -llog

2.C代码中增加以下内容

#include <android/log.h>

#define LOG_TAG "System.out"

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)

3.C代码中使用logcat, 例:

LOGI("info\n");

LOGD("debug\n");

 

11_使用C语言校验密码综合案例-strcmp-22

  1. C端验证密码代码如下:

创建文件“登录校验.c”

#include<stdio.h>

#include<stdlib.h>

 

//校验密码是否正确,正确返回200,错误返回400

int login(char* password){

    //校验密码

    //原始密码,服务器的密码

    char* originPassword = "123";

    //比较密码,密码相同返回0

    int isSame = strcmp(password,originPassword);

    if(isSame ==0)

    {

       return 200;      

    }        

             

    return 400;       

   

       

}        

 

main(){

      

    char* password = "123";

    int result = login(password);

    if(result==200)

    {

        printf("登录成功!\n");          

    }else{

       printf("登录失败!\n");       

    }     

   

    system("pause");       

}

 

运行结果:

  1. Android工程创建并移植

  1、创建Android工程名:C端验证密码;包名:com.atguigu.checkpassword

 

  2、布局文件效果如下:

 3、Java代码

 

 

 

package com.atguigu.checkpassword;

 

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.EditText;

import android.widget.Toast;

 

public class MainActivity extends Activity {

    private EditText ed_password;

    {

       System.loadLibrary("atguigu");

    }

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       ed_password = (EditText) findViewById(R.id.ed_password);

    }

 

    public void login(View view){

      

       String password = ed_password.getText().toString().trim();

       int result = login(password);

       if(result==200){

           Toast.makeText(this, "登录成功", 1).show();

       }else{

           Toast.makeText(this, "登录失败", 1).show();

       }

    }

   

    public native int login(String password);

}

 

3.C语言完整代码

#include "com_atguigu_checkpassword_MainActivity.h"

#include <stdio.h>

#include <stdlib.h>

 

 

/**

 * 把一个jstring转换成一个c语言的char* 类型.

 */

char* _JString2CStr(JNIEnv* env, jstring jstr) {

     char* rtn = NULL;

     jclass clsstring = (*env)->FindClass(env, "java/lang/String");

     jstring strencode = (*env)->NewStringUTF(env,"GB2312");

    jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes", "(Ljava/lang/String;)[B");

     jbyteArray barr = (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid, strencode); // String .getByte("GB2312");

     jsize alen = (*env)->GetArrayLength(env, barr);

     jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);

     if(alen > 0) {

       rtn = (char*)malloc(alen+1); //"\0"

       memcpy(rtn, ba, alen);

       rtn[alen]=0;

     }

     (*env)->ReleaseByteArrayElements(env, barr, ba,0);

     return rtn;

}

 

/**

 * 校验密码是否正确,正确返回200,错误返回400

 */

int login(char* password){

    //校验密码

    //原始密码,服务器的密码

    char* originPassword = "123";

    //比较密码

    int isSame = strcmp(password,originPassword);

    if(isSame ==0)

    {

       return 200;

    }

 

    return 400;

 

 

}

 

JNIEXPORT jint JNICALL Java_com_atguigu_checkpassword_MainActivity_login

  (JNIEnv *env, jobject obj, jstring jPassword){

    //jstring转换成char*

    char* cStr = _JString2CStr(env,jPassword);

    //登录

    return login(cStr);

 

}

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值