// Path: mylibrary/src/main/java/com/itcode/mylibrary/NativeEngine.java
// public class NativeEngine {
//     /**
//      * 用于将上下文传给 Cpp 层
//      *
//      * @param activity
//      */
//     public native void register(Activity activity);
// 
//     /**
//      * 在 Cpp 中加密
//      *
//      * @param rawStr 原始字符
//      * @return 加密后的字符
//      */
//     public native String encryptInCpp(String rawStr);
// 
//     /**
//      * 在 Cpp 中解密
//      *
//      * @param cipherText 密文
//      * @return 解密后的字符
//      */
//     public native String decryptInCpp(String cipherText);
// 
//     /**
//      * 通过 cpp 请求网络获取机器配置
//      *
//      * @param deviceModel 手机设备名
//      * @param timeout     超时时间
//      * @return
//      */
//     public native boolean getDeviceInfo(String deviceModel, int timeout);
// 
//     // Used to load the 'native-lib' library on application startup.
//     static {
//         System.loadLibrary("native-lib");
//     }
// }


import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.itcode.mylibrary.NativeEngine;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;
        setContentView(R.layout.activity_main);
        x.view().inject(this);
        setListener();
        nativeEngine = new NativeEngine();
        nativeEngine.register(this);
    }

    private void setListener() {
        btnEncrypt.setOnClickListener(this);
        btnDecrypt.setOnClickListener(this);
        btnGetDeviceInfo.setOnClickListener(this);
    }

                String deviceModel;
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnGetDeviceInfo:
                if(TextUtils.isEmpty(etDeviceModel.getText())){
                    deviceModel = Build.MODEL;
                }
                    deviceModel = etDeviceModel.getText().toString().trim();
                nativeEngine.getDeviceInfo(deviceModel,5000);
                break;
            case R.id.btnEncrypt:
                if (TextUtils.isEmpty(etRawStr.getText())) {
                    Toast.makeText(this, "请输入要加密的字符串", Toast.LENGTH_SHORT).show();
                    return;
                }
                String cipherText = nativeEngine.encryptInCpp(etRawStr.getText().toString().trim());
// Path: mylibrary/src/main/java/com/itcode/mylibrary/NativeEngine.java
// public class NativeEngine {
//     /**
//      * 用于将上下文传给 Cpp 层
//      *
//      * @param activity
//      */
//     public native void register(Activity activity);
// 
//     /**
//      * 在 Cpp 中加密
//      *
//      * @param rawStr 原始字符
//      * @return 加密后的字符
//      */
//     public native String encryptInCpp(String rawStr);
// 
//     /**
//      * 在 Cpp 中解密
//      *
//      * @param cipherText 密文
//      * @return 解密后的字符
//      */
//     public native String decryptInCpp(String cipherText);
// 
//     /**
//      * 通过 cpp 请求网络获取机器配置
//      *
//      * @param deviceModel 手机设备名
//      * @param timeout     超时时间
//      * @return
//      */
//     public native boolean getDeviceInfo(String deviceModel, int timeout);
// 
//     // Used to load the 'native-lib' library on application startup.
//     static {
//         System.loadLibrary("native-lib");
//     }
// }


// Path: app/src/main/java/com/itcode/jnidemo/MainActivity.java
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.itcode.mylibrary.NativeEngine;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;

        setContentView(R.layout.activity_main);
        x.view().inject(this);
        setListener();
        nativeEngine = new NativeEngine();
        nativeEngine.register(this);
    }

    private void setListener() {
        btnEncrypt.setOnClickListener(this);
        btnDecrypt.setOnClickListener(this);
        btnGetDeviceInfo.setOnClickListener(this);
    }

                String deviceModel;
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnGetDeviceInfo:
                if(TextUtils.isEmpty(etDeviceModel.getText())){
                    deviceModel = Build.MODEL;
                }
                    deviceModel = etDeviceModel.getText().toString().trim();
                nativeEngine.getDeviceInfo(deviceModel,5000);
                break;
            case R.id.btnEncrypt:
                if (TextUtils.isEmpty(etRawStr.getText())) {
                    Toast.makeText(this, "请输入要加密的字符串", Toast.LENGTH_SHORT).show();
                    return;
                }
                String cipherText = nativeEngine.encryptInCpp(etRawStr.getText().toString().trim());
                etShowCipherText.setText(cipherText);