AS NDK开发(一):as构建项目

  • 新建一个Android Studio 工程 。新建一个Cryptor.java文件。

在这里插入图片描述

  • 在app/src/main/java目录下执行javah命令,生成.h头文件

在这里插入图片描述

  • 在app/src/main文件夹下新建一个jni文件夹,将.h头文件copy到jni目录下

在这里插入图片描述

  • 在jni目录下新建一个c/c++source file ,取名ndk_file_crypt.c

在这里插入图片描述

  • 在jni文件夹下新建Android.mk和Application.mk文件。

    Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := ndk_file_crypt
LOCAL_SRC_FILES := ndk_file_crypt.cinclude $(BUILD_SHARED_LIBRARY)

Application.mk


APP_ABI := all
  • ,关联下载好的ndk包

在这里插入图片描述

  • 项目添加C/C++引用到Grade中

切换到Android视图,项目名右键->Link C++ Project with Gradle->选择ndk-build->然后选择Android.mk的项目路径;
在这里插入图片描述
在这里插入图片描述

  • ndk_file_crypt.c 实现上面.h文件中的方法。
#include "cn_tsou_ndkfilecrypt_ndk_Cryptor.h"//加密
JNIEXPORT jstring JNICALL Java_cn_tsou_ndkfilecrypt_ndk_Cryptor_crypt(JNIEnv *env, jclass jcls, jstring jstr){return (*env)->NewStringUTF(env,"加密");
}//解密
JNIEXPORT jstring JNICALL Java_cn_tsou_ndkfilecrypt_ndk_Cryptor_decrypt(JNIEnv *env, jclass jcls, jstring jstr){return (*env)->NewStringUTF(env,"解密");
}
  • 在MainActivity中调用
package cn.tsou.ndkfilecrypt;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;import cn.tsou.ndkfilecrypt.ndk.Cryptor;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/*** 加密* @param view*/public void mCrypt(View view){String crypt = Cryptor.crypt("");Toast.makeText(this,crypt,Toast.LENGTH_LONG).show();}/*** 解密* @param view*/public void mDecrypt(View view){String decrypt = Cryptor.decrypt("");Toast.makeText(this,decrypt,Toast.LENGTH_LONG).show();}
}
  • 运行效果图

在这里插入图片描述


  • WARNING: ABIs [arm64-v8a,armeabi-v7a,armeabi] set by ‘android.injected.build.abi’ gradle flag contained ‘ARMEABI’ not targeted by this project.

在这里插入图片描述

清除勾选全部即可

  • Error:(81) Android NDK: Application targets deprecated ABI(s): armeabi
Android NDK从r16 beta1开始,不再支持 ARM5 (armeabi)。默认情况下,
Android NDK不会构建ARM5版本。如果在Application.mk配置了构建ARM5版本,会收到类似以下的警告:Error:(81) Android NDK: Application targets deprecated ABI(s): armeabiError:(82) Android NDK: Support for these ABIs will be removed in a future NDK release. 
Android系统支持的CPU架构ARMv5:armeabi,32位
ARMv7:armeabi-v7a,32位
x86:x86,32位
MIPS:mips,32位
ARMv8:arm64-v8a,64位
MIPS64:mips64,64位
x86_64:x86_64,64
Application.mk配置APP_ABIApplication.mk的参数APP_ABI用来配置Android系统支持的CPU架构。支持所有架构APP_ABI := all支持所有32位架构APP_ABI := all32支持指定的架构APP_ABI := armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64多个架构使用逗号隔开。

参考:https://github.com/android-ndk/ndk/wiki/Changelog-r16-beta1


怎样生成so库

  • 在终端进入到jni目录,输入指令 ndk-build,就会生成相应的so文件

  • 调用so文件。
    在app的bulid文件中加入如下代码,然后build project

在这里插入图片描述

android {...sourceSets {main() {jniLibs.srcDirs = ['src/main/libs']jni.srcDirs = [] //屏蔽掉默认的jni编译生成过程}}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部