Android NDK开发入门之HelloWorld(续集)

3 篇文章 0 订阅

看过我上篇文章的同学肯定知道这边文章要做甚了,若不知道或者没看过的童鞋们,请移步到我的上一篇文章?


五、最简单的SDK
  1. 选择我们的项目,make项目或者build我们的项目,在我们的build文件中可以找到,已经生成好的.so文件如图:
    在这里插入图片描述

  2. 这个步骤可有可无哦,不过现在更多会操作这步骤,就是将我们之前创建的ndklibrary打包成一个jar包,这样别的项目引入我们.so文件和jar包就可以使用我们的SDK了,本人比较懒,采用最简单的方法,别的项目导入这个ndklibrary,放心,这个第三者看不到我们的实现,是不是瞬间感觉很高大上哈哈??!

  3. 创建新的项目SDKDemo,具体创建细节我们就不多叙说了,然后导入我们的ndklibrary(打包为jar的就引入jar包),在main目录下穿件文件夹jniLibs,把我们的.so库文件复制过去,工程目录为:
    在这里插入图片描述
    接下来就是大家熟悉的部分,引入我们的SDK,首先创建我们自己Application,并在其中初始化我们的NDKManager:

    	public class MyApplication extends Application {
    	
    	    private NDKManager sNDKManager;
    	
    	    @Override
    	    public void onCreate() {
    	        super.onCreate();
    	        sNDKManager = NDKManager.init(this);
    	    }
    	
    	    public NDKManager getsNDKManager() {
    	        return sNDKManager;
    	    }
    	}
    
六、编码我们的新项目?
  1. 第一部分(最简单的native):来显示我们最简单的native方法回调结果及清除显示结果。

  2. 第二部分(加密部分):1)输入框,来输入我们要加密的字符串;2)加密,并将加密的结果显示出来。

  3. 第三部分(解密部分):获取加密的内容将其解密并显示出来。
    以下是布局文件和MainActivity:

    	public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    	
    	    private TextView easyNative;
    	    private Button easyButton;
    	    private TextView encodeString;
    	    private Button encode;
    	    private TextView decodeString;
    	    private Button decode;
    	    private String encodResult;
    	    private EditText inputEncodeStr;
    	    private Button clearAllMessage;
    	
    	    private NDKManager mNDKManager;
    	
    	    @Override
    	    protected void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.activity_main);
    	        initView();
    	        mNDKManager = ((MyApplication) getApplication()).getsNDKManager();
    	
    	    }
    	
    	    private void initView() {
    	        easyNative = ((TextView) findViewById(R.id.easyNative));
    	        easyButton = ((Button) findViewById(R.id.easyButton));
    	        encodeString = ((TextView) findViewById(R.id.encodeStr));
    	        encode = ((Button) findViewById(R.id.encode));
    	        decodeString = ((TextView) findViewById(R.id.decodeStr));
    	        decode = ((Button) findViewById(R.id.decode));
    	        inputEncodeStr = ((EditText) findViewById(R.id.inputEncodeStr));
    	        clearAllMessage = ((Button) findViewById(R.id.clearAllMessage));
    	        easyButton.setOnClickListener(this);
    	        encode.setOnClickListener(this);
    	        decode.setOnClickListener(this);
    	        clearAllMessage.setOnClickListener(this);
    	    }
    	
    	    @Override
    	    public void onClick(View v) {
    	        switch (v.getId()) {
    	            case R.id.clearAllMessage:
    	                easyNative.setText("null");
    	                inputEncodeStr.setText(null);
    	                encodeString.setText("null");
    	                decodeString.setText("null");
    	                break;
    	            case R.id.encode:
    	                String s = inputEncodeStr.getText().toString();
    	                if (TextUtils.isEmpty(s)||"null".equals(s)) {
    	                    Toast.makeText(this, "请输入您加密的内容", Toast.LENGTH_SHORT).show();
    	                    return;
    	                }
    	                String encodeResult = mNDKManager.encodeString(s);
    	                encodeString.setText(encodeResult);
    	                break;
    	            case R.id.decode:
    	                String encodeContent = encodeString.getText().toString();
    	                if (TextUtils.isEmpty(encodeContent)||"null".equals(encodeContent)) {
    	                    Toast.makeText(this, "请配置要解密的内容", Toast.LENGTH_SHORT).show();
    	                    return;
    	                }
    	                String decodeResult = mNDKManager.decodeString(encodeContent);
    	                decodeString.setText(decodeResult);
    	                break;
    	            case R.id.easyButton:
    	                String showMessage = mNDKManager.getShowMessage();
    	                easyNative.setText(showMessage);
    	                break;
    	        }
    	    }
    	}
    

布局文件:


	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	    xmlns:app="http://schemas.android.com/apk/res-auto"
	    xmlns:tools="http://schemas.android.com/tools"
	    android:layout_width="match_parent"
	    android:orientation="vertical"
	    android:layout_height="match_parent"
	    tools:context=".MainActivity">
	
	    <LinearLayout
	        android:layout_marginTop="10dp"
	        android:layout_width="match_parent"
	        android:orientation="horizontal"
	        android:layout_height="?actionBarSize">
	
	        <TextView
	            android:id="@+id/easyNative"
	            android:layout_width="0dp"
	            android:gravity="center"
	            android:layout_height="match_parent"
	            android:layout_weight="2" />
	
	        <Button
	            android:id="@+id/easyButton"
	            android:layout_width="0dp"
	            android:layout_height="match_parent"
	            android:layout_weight="2"
	            android:text="最简单的Native方法" />
	
	
	    </LinearLayout>
	
	    <View
	        android:layout_width="match_parent"
	        android:layout_height="1px"
	        android:background="@color/colorPrimary" />
	
	    <LinearLayout
	        android:layout_marginTop="10dp"
	        android:layout_width="match_parent"
	        android:orientation="horizontal"
	        android:layout_height="?actionBarSize">
	
	        <EditText
	            android:id="@+id/inputEncodeStr"
	            android:layout_width="0dp"
	            android:layout_weight="1"
	            android:hint="请输入要加密的内容"
	            android:layout_height="match_parent" />
	
	        <Button
	            android:id="@+id/clearAllMessage"
	            android:layout_width="wrap_content"
	            android:text="clear"
	            android:textAllCaps="false"
	            android:gravity="center"
	            android:textSize="18sp"
	            android:layout_gravity="center"
	            android:layout_height="match_parent" />
	
	    </LinearLayout>
	
	    <View
	        android:layout_width="match_parent"
	        android:layout_height="1px"
	        android:background="@color/colorPrimary" />
	
	    <LinearLayout
	        android:layout_width="match_parent"
	        android:orientation="horizontal"
	        android:layout_height="?actionBarSize">
	
	        <TextView
	            android:id="@+id/encodeStr"
	            android:layout_width="0dp"
	            android:gravity="center"
	            android:text="null"
	            android:layout_height="match_parent"
	            android:layout_weight="2" />
	
	        <Button
	            android:id="@+id/encode"
	            android:layout_width="0dp"
	            android:layout_height="match_parent"
	            android:layout_weight="2"
	            android:text="加密" />
	    </LinearLayout>
	    <View
	        android:layout_width="match_parent"
	        android:layout_height="1px"
	        android:background="@color/colorPrimary" />
	
	    <LinearLayout
	        android:layout_width="match_parent"
	        android:orientation="horizontal"
	        android:layout_height="?actionBarSize">
	        <TextView
	            android:id="@+id/decodeStr"
	            android:layout_width="0dp"
	            android:gravity="center"
	            android:text="null"
	            android:layout_height="match_parent"
	            android:layout_weight="2" />
	
	        <Button
	            android:id="@+id/decode"
	            android:layout_width="0dp"
	            android:layout_height="match_parent"
	            android:layout_weight="2"
	            android:text="解密" />
	    </LinearLayout>
	
	
	</LinearLayout>
七、测试工作

运行效果为:
在这里插入图片描述

  1. 点击第一个按钮,显示最简单的native方法返回值(success):
    在这里插入图片描述
  2. 输入我们加密内容"MyApplication",并进行加密为:
    在这里插入图片描述
  3. 解密我们的加密内容并显示出来,如下,成功解密出加密内容为:MyApplication
    在这里插入图片描述
  4. 多次测试,点击clear清除所有信息,多次测试,这个就交给大家啦!

关于Android NDK开发入门HelloWorld就到此为止了,希望能给大家一个比较深刻的印象,当然这只是给大家简单展示一下,后续还需要大家更深入的进行了解学习。
ps:此项目有几个小坑,如果和我写的基本一样,只会遇到中文加密解密的坑,不一样那就不敢保证你会有什么艳遇了,这些坑留给看官们自己去发觉啦!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值