studio写jniHelloWorld的步骤

来源:互联网 发布:淘宝卖土特产前景分析 编辑:程序博客网 时间:2024/06/08 13:29

studio写jniHelloWorld的步骤

1. 创建一个项目2. 创建一个java项目例如myJNI    1. 类中声明一个本地方法:    2. 声明链接 这样才能在java代码中调用c    代码如下:        public class myJNI {            static {                System.loadLibrary("hello"); //加载动态链接库            }            public static  native String helloFromC();        }3. 在Terminal中进行命令行操作    1. 进入myJNI所在的文件夹下 cd app\src\main\java\com\wal\jni    2. 对于myJNI.java进行编译,生成class文件  javac myJNI.java    3. 退回到com的上一层      4. 用myJNI.class生成javah文件 4. 创建c文件    1. 在main文件夹下创建文件夹 例如 : jni    2. 在jni中创建c文件,文件名为hello(要与2.2中声明的相同)    3. c文件中写代码,先将h文件中生成的头考过来.注:虽然h文件不影响运行,但是方法多的时候可以方便写c文件    #include <jni.h>    JNIEXPORT jstring    JNICALL Java_com_wal_encode_myJNI_encode            (JNIEnv *env, jclass obj, jstring str) {        char *cstr = (*env)->GetStringUTFChars(env, str, 0);        int i;        for (i = 0; i < strlen(cstr); i++) {            *(cstr + i) += 1;        }        return (*env)->NewStringUTF(env, cstr);    }5. 重要配置    1. 配置ndk路径    2. appbuild.Gradle中配置ndk(defaultConfig节点下)        defaultConfig {            applicationId "com.wal.jni"            minSdkVersion 15            targetSdkVersion 23            versionCode 1            versionName "1.0"            ndk{                moduleName "hello"         //生成的so名字                abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。目前可有可无。            }        }    3. appbuild.Gradle中的android下配置:否则找不到ndk,c文件会报错        sourceSets.main {            jni.srcDirs = []        }6. 在Mainactivity中进行c的调用(例如输入一个字符串 或弹个土司)    public class MainActivity extends AppCompatActivity {        private String str;        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);            str = new myJNI().helloFromC();        }        public void click(View view) {            Toast.makeText(this,str,Toast.LENGTH_SHORT).show();        }    }7. 运行到手机上               
0 0
原创粉丝点击