日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android111 java中调用c代码

發布時間:2025/3/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android111 java中调用c代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MainActivity:

package com.itheima.helloworld1;import android.os.Bundle; import android.app.Activity; import android.view.View; import android.widget.Toast;public class MainActivity extends Activity {static{//加載打包完畢的so類庫System.loadLibrary("hello");//hello是Abdroid.mk中指定的名字。 }@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/*##使用jni1. 在項目根目錄下創建jni文件夾2. 在jni文件中創建一個c文件(src是寫java代碼的)3. 在java代碼中,創建一個本地方法helloFromCpublic native String helloFromC();4. 在jni中定義函數實現這個方法,函數名必須為jstring Java_com_itheima_helloworld1_MainActivity_helloFromC(JNIEnv* env, jobject obj)5. 返回一個字符串,用c定義一個字符串char* cstr = "hello from c";6. 把c的字符串轉換成java的字符串jstring jstr = (*env)->NewStringUTF(env, cstr);return jstr;7. 在jni中創建Android.mk文件8. 在c文件中添加<jni.h>頭文件9. 在jni文件夾下執行ndk-build.cmd指令( 在磁盤jni文件夾下用cmd命令編譯,編譯完后在libs下的armeabi文件夾下有一個libhello.so文件,這就是編譯后的c代碼)10. java代碼中加載so類庫,調用本地方法*/public void click(View v){Toast.makeText(this, helloFromC(), 0).show();}//定義一個本地方法,方法體由c語言實現public native String helloFromC();}

Android.mk

# mk是make的意思LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)#編譯后生成的文件的類庫叫什么名字LOCAL_MODULE := hello#要編譯的c文件LOCAL_SRC_FILES := Hello.cinclude $(BUILD_SHARED_LIBRARY)

Hello.c

#include <stdio.h> #include <stdlib.h> #include <jni.h>//jstring表示string,Java_com_itheima_helloworld1_MainActivity_helloFromC是包名類名方法名 //JNIEnv* env, jobject obj是必須寫的參數,env是java虛擬機的內存地址,java代碼是運行在虛擬機的而C代碼不是運行在虛擬機的, //env本來就是一個結構體指針,此處* env是一個java運行環境的二級指針,obj是MainActivity對象,C中jobject表示對象。 jstring Java_com_itheima_helloworld1_MainActivity_helloFromC(JNIEnv* env, jobject obj){//c語言的字符串不是string,是字符數組,char* cstr或者char cstr[],數組的名字就是第0個元素的地址,char* cstr = "hello from c";//把C語言的字符串轉換成java的字符串// jstring (*NewStringUTF)(JNIEnv*, const char*); // jstring jstr = (*(*env)).NewStringUTF(env, cstr);jstring jstr = (*env)->NewStringUTF(env, cstr);return jstr; }

Application.mk中:APP_ABI := armeabi armeabi-v7a x86 //表示不同的架構

java代碼很容易反編譯,c代碼反編譯比較難。

java代碼最后使用的是c代碼編譯后的類庫,原C代碼已經沒用了。



本文轉自農夫山泉別墅博客園博客,原文鏈接:http://www.cnblogs.com/yaowen/p/4986806.html,如需轉載請自行聯系原作者


總結

以上是生活随笔為你收集整理的android111 java中调用c代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。