導航:首頁 > 操作系統 > androidj

androidj

發布時間:2022-04-26 08:21:35

androidj的java代碼.小錯誤找不出來..

1、你少些了一個括弧,一個冒號,在你圖中滑鼠位置上加一個「);」就可以了
2、記得導包View.OnClickListener別導錯了,Dialog也有個OnClickListener

② android studio怎樣移除jrebel插件

有三種常見卸載方式,但根據軟體,不一定都具備。1、安裝完軟體後,不單有軟體運行快捷圖標,同時還會有一個卸載該軟體的快捷圖標,名字有很多,比如「卸載****」、「Uninstall***」等,直接運行,根據提示進行卸載就可以。2、在「我的電腦」里「控制面。詳細的可以看看安卓巴士教程:http://www.apkbus.com/thread-463555-1-1.html

③ androidstudio3.4安裝了快速編譯的jrebel forAndroid,執行jrebel編譯運行提示錯誤,jrebel用不了怎麼解決

u,具有,看i,u提u,天天,幾天,具體,u提u,圖,看ti,uit,u

④ 一個android 項目,類文件都變成了 J 開頭的文件

這是因為你的studio設置了省電模式,你可以通過 File>Power Save Mode取消掉

⑤ Android JNI開發資料,源碼

pekdou

您 好 :

強 烈 建 議 你 直 接 看 一 下 這 個 吧 ! 可 以 節 省 你 很 多 時 間 !

tZx www.PoPa.sumwu.com。UmV

¤○①¤◎◇▓↓⊕◎
jclass GpsInfoClass = env->FindClass("com/parser/GPSINFO");
jfieldID ID_bValid = env->GetFieldID(GpsInfoClass,"bValid","I");
jfieldID ID_bSpeed = env->GetFieldID(GpsInfoClass,"bSpeed","I");
env->SetIntField(_obj,ID_bValid,(jint)info.bValid);
env->SetIntField(_obj,ID_bSpeed,(jint)info.bSpeed);
return _obj;
以上就可以了。但是不知道你的BYTE是自定義的什麼類型,如果是char之類的,就另外想辦法轉換成jint。其中 _obj 變數是public native GPSINFO getGpsInfo();這個本地方法在C代碼中的參數:JNIEXPORT jobject JNICALL Java_com_parser_GPSINFO_ getGpsInfo(JNIEnv *env, jobject _obj)

⑥ 如何在android的jni線程中實現回調

jni回調是指在c/c++代碼中調用java函數,當在c/c++的線程中執行回調函數時,會導致回調失敗。

其中一種在Android系統的解決方案是:

把c/c++中所有線程的創建,由pthread_create函數替換為由Java層的創建線程的函數AndroidRuntime::createJavaThread。

假設有c++函數:

[cpp] view plain
void *thread_entry(void *args)
{
while(1)
{
printf("thread running...\n");
sleep(1);
}

}

void init()
{
pthread_t thread;
pthread_create(&thread,NULL,thread_entry,(void *)NULL);
}

init()函數創建一個線程,需要在該線程中調用java類Test的回調函數Receive:

[cpp] view plain
public void Receive(char buffer[],int length){
String msg = new String(buffer);
msg = "received from jni callback:" + msg;
Log.d("Test", msg);
}

首先在c++中定義回調函數指針:

[cpp] view plain
//test.h
#include <pthread.h>
//function type for receiving data from native
typedef void (*ReceiveCallback)(unsigned char *buf, int len);

/** Callback for creating a thread that can call into the Java framework code.
* This must be used to create any threads that report events up to the framework.
*/
typedef pthread_t (* CreateThreadCallback)(const char* name, void (*start)(void *), void* arg);

typedef struct{
ReceiveCallback recv_cb;
CreateThreadCallback create_thread_cb;
}Callback;

再修改c++中的init和thread_entry函數:

[cpp] view plain
//test.c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/wait.h>
#include <unistd.h>
#include "test.h"

void *thread_entry(void *args)
{
char *str = "i'm happy now";
Callback cb = NULL;
int len;
if(args != NULL){
cb = (Callback *)args;
}

len = strlen(str);
while(1)
{
printf("thread running...\n");
//invoke callback method to java
if(cb != NULL && cb->recv_cb != NULL){
cb->recv_cb((unsigned char*)str, len);
}
sleep(1);
}

}

void init(Callback *cb)
{
pthread_t thread;
//pthread_create(&thread,NULL,thread_entry,(void *)NULL);
if(cb != NULL && cb->create_thread_cb != NULL)
{
cb->create_thread_cb("thread",thread_entry,(void *)cb);
}
}

然後在jni中實現回調函數,以及其他實現:

[cpp] view plain
//jni_test.c
#include <stdlib.h>
#include <malloc.h>
#include <jni.h>
#include <JNIHelp.h>
#include "android_runtime/AndroidRuntime.h"

#include "test.h"
#define RADIO_PROVIDER_CLASS_NAME "com/tonny/Test"

using namespace android;

static jobject mCallbacksObj = NULL;
static jmethodID method_receive;

static void (JNIEnv* env, const char* methodName) {
if (env->ExceptionCheck()) {
LOGE("An exception was thrown by callback '%s'.", methodName);
LOGE_EX(env);
env->ExceptionClear();
}
}

static void receive_callback(unsigned char *buf, int len)
{
int i;
JNIEnv* env = AndroidRuntime::getJNIEnv();
jcharArray array = env->NewCharArray(len);
jchar *pArray ;

if(array == NULL){
LOGE("receive_callback: NewCharArray error.");
return;
}

pArray = (jchar*)calloc(len, sizeof(jchar));
if(pArray == NULL){
LOGE("receive_callback: calloc error.");
return;
}

// buffer to jchar array
for(i = 0; i < len; i++)
{
*(pArray + i) = *(buf + i);
}
// buffer to jcharArray
env->SetCharArrayRegion(array,0,len,pArray);
//invoke java callback method
env->CallVoidMethod(mCallbacksObj, method_receive,array,len);
//release resource
env->DeleteLocalRef(array);
free(pArray);
pArray = NULL;

(env, __FUNCTION__);
}

static pthread_t create_thread_callback(const char* name, void (*start)(void *), void* arg)
{
return (pthread_t)AndroidRuntime::createJavaThread(name, start, arg);
}

static Callback mCallbacks = {
receive_callback,
create_thread_callback
};

static void jni_class_init_native
(JNIEnv* env, jclass clazz)
{
method_receive = env->GetMethodID(clazz, "Receive", "([CI)V");
}

static int jni_init
(JNIEnv *env, jobject obj)
{

if (!mCallbacksObj)
mCallbacksObj = env->NewGlobalRef(obj);

return init(&mCallbacks);
}

static const JNINativeMethod gMethods[] = {
{ "class_init_native", "()V", (void *)jni_class_init_native },
{ "native_init", "()I", (void *)jni_init },
};

static int registerMethods(JNIEnv* env) {

const char* const kClassName = RADIO_PROVIDER_CLASS_NAME;
jclass clazz;
/* look up the class */
clazz = env->FindClass(kClassName);
if (clazz == NULL) {
LOGE("Can't find class %s/n", kClassName);
return -1;
}
/* register all the methods */
if (env->RegisterNatives(clazz,gMethods,sizeof(gMethods)/sizeof(gMethods[0])) != JNI_OK)
{
LOGE("Failed registering methods for %s/n", kClassName);
return -1;
}
/* fill out the rest of the ID cache */
return 0;
}

jint JNI_OnLoad(JavaVM* vm, void* reserved) {
JNIEnv* env = NULL;
jint result = -1;
LOGI("Radio JNI_OnLoad");
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
LOGE("ERROR: GetEnv failed/n");
goto fail;
}

if(env == NULL){
goto fail;
}
if (registerMethods(env) != 0) {
LOGE("ERROR: PlatformLibrary native registration failed/n");
goto fail;
}
/* success -- return valid version number */
result = JNI_VERSION_1_4;
fail:
return result;
}

jni的Android.mk文件中共享庫設置為:

[cpp] view plain
LOCAL_SHARED_LIBRARIES := liblog libcutils libandroid_runtime libnativehelper

最後再實現Java中的Test類:

[java] view plain
//com.tonny.Test.java

public class Test {

static{
try {
System.loadLibrary("test");
class_init_native();

} catch(UnsatisfiedLinkError ule){
System.err.println("WARNING: Could not load library libtest.so!");
}

}

public int initialize() {
return native_radio_init();
}

public void Receive(char buffer[],int length){
String msg = new String(buffer);
msg = "received from jni callback" + msg;
Log.d("Test", msg);
}

protected static native void class_init_native();

protected native int native_init();

}

⑦ android studio 導入項目報錯,紅色j

eclipse項目是不能直接導入android studio的,只能在as上新建項目,一個java類一個java類的拷貝。

⑧ android Studio的java類變為藍j怎麼辦

解決:這是因為你的studio設置了省電模式,你可以通過 File>Power Save Mode取消掉,或者通過點擊右下角小人頭像取消

部分java文件前標識圖標顯示為 j 而是 c,File size exceeds configured limit (2560000)

IDEA對能關聯的文件大小做了限制,主要是為了保護內存,默認值為2500kb,對於一般的java文件也夠用了,只是這里我用protocbuf生成的java文件過大,達到3M多

android studio安裝目錄下bin 下的idea.properties文件。

[java]view plain

⑨ Android JNI部分得到jbytearray,Java用byte[]數組進行接收。該如何實現

利用
jni
的回調機制
java層定義
native方法
private
void
aa(string
c)
{
output(c);
};
JNI層添加native數組
static
JNINativeMethod
array
=
{
{
「aa",
"(JString)V",
(void*)JNI_aa,
},
};
jni層調用注冊的方法
jclass
cls
=
(*env)->GetObjectClass(env,
log);
jmethodID
jmid
=
(*env)->GetMethodID(env,
cls,
"aa",
"(Ljava/lang/String;)V");
jstring
info
=
(*env)->NewStringUTF(env,
"out!");
(*env)->CallVoidMethod(env,log,
jmid,info);
//調用方法
//釋放string
(*env)->ReleaseStringUTFChars(env,info,(*env)->GetStringUTFChars(env,
info,
FALSE));

閱讀全文

與androidj相關的資料

熱點內容
查看ipdns命令 瀏覽:260
命令與征服3凱恩之怒漢化 瀏覽:865
linuxc一站式編程 瀏覽:96
比心app男的識別女的怎麼樣 瀏覽:637
線切割pdf 瀏覽:638
命令與征服3泰伯利亞戰爭109修改器 瀏覽:521
看著很解壓的景色 瀏覽:896
sqlite在Android中應用 瀏覽:77
pdf虛擬列印機ofmac 瀏覽:354
九江php招聘 瀏覽:376
怎麼在ubuntu編程 瀏覽:256
思科保存的命令是什麼意思 瀏覽:958
主力控制副圖源碼及套利選股公式 瀏覽:813
兄弟php培訓怎麼樣 瀏覽:678
金炯泰編譯器 瀏覽:860
涼山參加青少年編程培訓班報名 瀏覽:598
程序員開發者模式 瀏覽:199
電腦有圖標的文件夾是什麼 瀏覽:350
app停運了怎麼恢復 瀏覽:188
u盤加密密碼怎麼刪除 瀏覽:90