NDK开发入门之HelloWorld续集
看过我上篇文章的同学肯定知道这边文章要做甚了,若不知道或者没看过的童鞋们,请移步到我的上一篇文章?
五、最简单的SDK
-
选择我们的项目,make项目或者build我们的项目,在我们的build文件中可以找到,已经生成好的.so文件如图:
-
这个步骤可有可无哦,不过现在更多会操作这步骤,就是将我们之前创建的ndklibrary打包成一个jar包,这样别的项目引入我们.so文件和jar包就可以使用我们的SDK了,本人比较懒,采用最简单的方法,别的项目导入这个ndklibrary,放心,这个第三者看不到我们的实现,是不是瞬间感觉很高大上哈哈??!
-
创建新的项目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; } }
六、编码我们的新项目?
-
第一部分(最简单的native):来显示我们最简单的native方法回调结果及清除显示结果。
-
第二部分(加密部分):1)输入框,来输入我们要加密的字符串;2)加密,并将加密的结果显示出来。
-
第三部分(解密部分):获取加密的内容将其解密并显示出来。
以下是布局文件和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>
七、测试工作
运行效果为:
- 点击第一个按钮,显示最简单的native方法返回值(success):
- 输入我们加密内容"MyApplication",并进行加密为:
- 解密我们的加密内容并显示出来,如下,成功解密出加密内容为:MyApplication
- 多次测试,点击clear清除所有信息,多次测试,这个就交给大家啦!
关于Android NDK开发入门HelloWorld就到此为止了,希望能给大家一个比较深刻的印象,当然这只是给大家简单展示一下,后续还需要大家更深入的进行了解学习。
ps:此项目有几个小坑,如果和我写的基本一样,只会遇到中文加密解密的坑,不一样那就不敢保证你会有什么艳遇了,这些坑留给看官们自己去发觉啦!!