當前位置:首頁 » 安卓系統 » androidc調用java

androidc調用java

發布時間: 2022-12-18 14:31:16

㈠ 請問在android開發中,如何問在jni中調用java類的用synchronized修飾的靜態方法

那個返回類型可能也需要加上分號結尾。看圖中有文本編輯器打開一個class文件的例子。synchronized 本身不是簽名的一部分,按理說它僅影響執行時的過程,不影響查找方法本身。

㈡ Android程序可以調用C函數嗎 我需要使用C訪問Android底層,然後希望Android程序調用C程序。

在一些Android應用的開發中,需要通過JNI和 Android NDK工具實現JAVA和C/C++之間的相互調用。
Java Native Interface (JNI)標準是java平台的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI是本地編程介面,它使得在 Java 虛擬機 (VM)內部運行的 Java代碼能夠與用其它編程語言(如 C、C++和匯編語言)編寫的應用程序和庫進行交互操作。
NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。這些工具對開發者的幫助是巨大的。NDK集成了交叉編譯器,並提供了相應的mk文件隔離CPU、平台、ABI等差異,開發人員只需要簡單修改mk文件(指出「哪些文件需要編譯」、「編譯特性要求」等),就可以創建出so。NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作。

㈢ 關於Android開發中Java對於.so庫的調用

android掉用c的so包就是通過jni

應該給你的jar包就是用來調用so包的
。不會讓你直接掉so包的放心。so包一般都是為了保證核心代碼不被反編譯
,另外就是效率高才會用,或者就是開發游戲

他們說夠用應該是jar包已經和so包的jni調用介面都調好了

你用jar包就行了

㈣ android源碼里 c調java error: undefined reference to 'JNI_CreateJavaVM'求助

android 裡面的java調用c,主要是通過ndk組件來實現的,env和vm都是系統創建好了的,可以直接調用的,看的出來樓主應該是ndk方面的初學者,對jni,ndk這些東西的關系應該沒有弄清楚,如果僅僅是一個java和c互掉的話,可以看我的帖子「ndk java 和 c 互掉」:
http://jingyan..com/article/f54ae2fcde72be1e92b84916.html
帖子集文檔,截圖,視頻於一體,涉及java調用c和c調用java兩部分,
由於感覺你是ndk的初學者,所以有時間的話,建議你看看我總結的帖子"android ndk資源匯總":
http://tieba..com/p/3439627347
希望對你有用,我是ndk吧吧主,有問題可以ndk吧留言,謝謝!

㈤ 在android上用C語言

安卓也可以用C語言編寫,這種方式程序效率高,但需要一些底層知識。。。(即所謂NDK),Android在支持NDK後是可以實現用C和C++來編寫的。因為用C++比較多,之前用cocos2d-x寫過Demo游戲。就使用了NDK編譯出.so文件然後放入Android工程用在Java層調用。Android SDK的Java層是可以通過JNI和C/C++進行數據交互的。
詳見:
Android NDK | Android Developers
The NDK is a toolset that allows you to implement parts of your app using native-code languages such as C and C++. For certain types of apps, this can be helpful so you can reuse existing code libraries written in these languages, but most apps do not need the Android NDK.

㈥ c調用java方法的時候CallObjectMethod這個方法一直錯誤,代碼貼上

Android.mk文件: LOCAL_SRC_FILES參數用空格隔開 [c-sharp] view plainprint? LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:=native LOCAL_SRC_FILES:=geolo.cpp my_jni.h include $(BUILD_SHARED_LIBRARY)

㈦ 關於Android開發中Java對於.so庫的調用

廠家並沒有欺騙你或者是含糊你的意思,確實是只提供給你jar包以及 so 庫就可以了,做法是這樣子的:
1.比如我現在在用net.sqlcipher.database 這個加密庫(網上能搜得到的,用於資料庫加密)。 那麼我現在就在項目用載入這個jar包(在你的項目單擊右鍵-》屬性-》Java Build Path-》Libraries-》Add Jars,選擇提供給你的jar包,我這里是 sqlcipher.jar,然後在Order and Export勾選你剛剛載入的 jar包。)
2.打開你的workspace目錄,在你的項目目錄下創建一個文件夾libs(如果文件夾不存在的話),然後將提供給你的so庫放入該目錄,基本架構就算是搭建好了。
3.進行開發,這里你需要問一下提供給你jar包的廠家,基本的用法,否則的話是無法進行開發的,因為你都不知道怎麼去用。 sqlcipher的基本用法是:
SQLiteDatabase.loadLibs(this); //載入 so庫文件,你的廠家的方法應該也是類似。
File databaseFile = getDatabasePath(SQLite_toll.DATABASE_NAME);
databaseFile.mkdirs();
databaseFile.delete();
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, helper_SharedPreferences.get_str_sp("database_cipher",this), null);
SQLite_toll initToll = new SQLite_toll(this, avaSys);
initToll.onCreate(database);
database.close();
//因為我sqlcipher是用於資料庫加密的,所以你所看到的都是資料庫的一些方法,你廠家提供給你的jar包的用法,你是要去問他們的,或者他們的是否有開源代碼,又或者是網上也有很多人使用,那麼能搜到相關資料。

根據你補充的提問,那麼就是System.loadLibrary(this); ,就可以調用了

㈧ 如何在C/C++中調用Java

JNI允許從本機代碼內調用 Java 類方法。

要做到這一點,通常必須使用 Invocation API 在本機代碼內創建和初始化一個 JVM。

下列是您可能決定從 C/C++ 代碼調用Java 代碼的典型情況:

1.希望實現的這部分代碼是平台無關的,將用於跨多種平台使用的功能。

2.需要在本機應用程序中訪問用 Java 語言編寫的代碼或代碼庫。

3.希望從本機代碼利用標准 Java 類庫。
從C/C++ 程序調用 Java 代碼的四個步驟:

1.編寫 Java 代碼。

這個步驟包含編寫一個或多個 Java 類,這些類實現(或調用其它方法實現)想要訪問的功能。

2.編譯 Java 代碼。

在能夠使用這些 Java 類之前,必須成功地將編譯成位元組碼。

3.編寫 C/C++ 代碼。

這個代碼將創建和實例化 JVM,並調用正確的 Java 方法。

㈨ 如何用c++和java開發android應用

Android應用是以Java為外殼的,C艹代碼得先通過NDK交叉編譯成.so共享庫再由Java調用,C艹代碼和Java交互是使用jni來實現,Android已經有了 Native Interface,其中就用到了很多jni的內容。JNI全名Java native interface。

㈩ android ndk 開發,C++ 調用Java的方法

  1. Android.mk文件:



LOCAL_SRC_FILES參數用空格隔開

[c-sharp]view plainprint?

LOCAL_PATH:=$(callmy-dir)

include$(CLEAR_VARS)

LOCAL_MODULE:=native

LOCAL_SRC_FILES:=geolo.cppmy_jni.h

include$(BUILD_SHARED_LIBRARY)


2. geolo.cpp

先用FindClass方法找到java類,有點類似java的反射用LoadClass

再用CallObjectMethod方法調用Java類的函數。


[c-sharp]view plainprint?

#include"my_jni.h"

jobjectgetInstance(JNIEnv*env,jclassobj_class){

jmethodIDconstruction_id=env->GetMethodID(obj_class,"<init>","()V");

jobjectobj=env->NewObject(obj_class,construction_id);

returnobj;

}

JNIEXPORTjstringJNICALLJava_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv*env,jobjectthiz){

jstringstr;

jclassjava_class=env->FindClass("com/easepal/geolo/CForCall");

if(java_class==0){

returnenv->NewStringUTF("notfindclass!");

}

jobjectjava_obj=getInstance(env,java_class);

if(java_obj==0){

returnenv->NewStringUTF("notfindjavaOBJ!");

}

jmethodIDjava_method=env->GetMethodID(java_class,"GetJavaString","()Ljava/lang/String;");

if(java_method==0){

returnenv->NewStringUTF("notfindjavamethod!");

}

str=(jstring)env->CallObjectMethod(java_obj,java_method);

returnstr;

}

3. my_jni.h


[c-sharp]view plainprint?

/*DONOTEDITTHISFILE-itismachinegenerated*/

#include<jni.h>

/*Headerforclasscom_easepal_geolo_CActivityMain*/

#ifndef_Included_com_easepal_geolo_CActivityMain

#define_Included_com_easepal_geolo_CActivityMain

#ifdef__cplusplus

extern"C"{

#endif

/*

*Class:com_easepal_geolo_CActivityMain

*Method:stringFromJNI

*Signature:()Ljava/lang/String;

*/

JNIEXPORTjstringJNICALLJava_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv*,jobject);

#ifdef__cplusplus

}

#endif

#endif


4.CActivityMain.java


[c-sharp]view plainprint?

packagecom.easepal.geolo;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.widget.TextView;

{

/**.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

TextViewtv=newTextView(this);

tv.setText(stringFromJNI("hello"));

setContentView(tv);

}

static{

System.loadLibrary("native");

}

(Stringstr);

}


5.CForCall.java


[c-sharp]view plainprint?

packagecom.easepal.geolo;

publicclassCForCall{

publicCForCall(){};

//public~CForCall(){};

publicStringGetJavaString(){

Stringstr;

str="123456";

returnstr;

}

}

熱點內容
扁桃玩的伺服器地址 發布:2025-05-17 12:18:25 瀏覽:507
u盤上傳歌 發布:2025-05-17 12:14:51 瀏覽:612
入門c語言設計 發布:2025-05-17 12:08:31 瀏覽:40
c3演算法 發布:2025-05-17 12:04:19 瀏覽:364
phprecv 發布:2025-05-17 11:55:00 瀏覽:610
福建時鍾監控網關伺服器雲主機 發布:2025-05-17 11:54:28 瀏覽:248
c資料庫壓縮 發布:2025-05-17 11:39:22 瀏覽:960
安卓手機如何連接音響功放 發布:2025-05-17 11:37:48 瀏覽:959
破解exe加密視頻 發布:2025-05-17 11:23:41 瀏覽:976
我的世界伺服器圈太大了怎麼辦 發布:2025-05-17 11:15:21 瀏覽:615