android調用靜態方法
Ⅰ 安卓手機怎麼設置靜態IP 固定IP
如何在安卓手機上設置靜態IP(固定IP)。
工具/原料
安卓手機一部
方法/步驟
1.打開手機應用程序列表,點擊「設置」進入手機設置頁面。
不同品牌的手機設置過程可能會有細微的差別。
Ⅱ android 怎麼引用一個靜態庫
由於工作需要,需要在framework中增加自己的動態庫,並且動態庫需要使用合作方提供的第三方靜態庫。但是在引入靜態庫編譯動態庫時總是提示失敗。具體如下:
1. 文件列表
可以看出這個配置文件的內容主要分為兩部分,第一部分預編譯靜態庫,這一過程不觸發構建過程,僅僅是重起了個名字,並且將該庫拷貝到某個路徑下(具體可以參看另一篇文章,NDK使用二進制庫的方法);第二部分是用於編譯動態本地庫,可以看出它通過LOCAL_STATIC_LIBRARIES關鍵字引入了之前預編譯的靜態庫。
Ⅲ 如何在android studio中用JNI調用靜態庫
android ndk開發經常遇到了動態庫的問題,本文主要介紹: ① 動態鏈接庫的生成; ② 在java和C混合編程的情況下如何調用第三方動態鏈接庫; ③ 使用dlopen程序運行時直接調用; ④ 純c的方式開發調用; 本文重點推薦②和④,第③中太麻煩每個函數都需要dlsym調用一次; 代碼的網路雲鏈接: pan/s/1dD3qkQ9 密碼:c5s3 工具/原料 Win8/article/63f236280b90690208ab3d12/article/c910274bfdd000cd371d2d4b/p/3247530080 2 根據「生成動態庫」中的過程1到10,新建一個純c的ndk程序: 「D:\Android\android-ndk-r10\samples\native-activity" 3 把會用的so文件的目錄libs拷貝到 jni目錄下面 4 修改 Android.mk 文件,內容如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := fkAdd LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libfkAdd.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := main LOCAL_SRC_FILES := main.c LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM LOCAL_STATIC_LIBRARIES := android_native_app_glue LOCAL_SHARED_LIBRARIES := fkAdd include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := native-activity LOCAL_SRC_FILES := NativeActivity.c LOCAL_LDLIBS := -llog -landroid LOCAL_STATIC_LIBRARIES := android_native_app_glue include $(BUILD_SHARED_LIBRARY) $(call import-mole,android/native_app_glue) 5 增加 NativeActivity.c 文件,添加內容如下: #include <jni.h> #include <errno.h> #include <dlfcn.h> #include <android_native_app_glue.h> void android_main(struct android_app* state) { // Make sure glue isn't stripped. app_mmy(); void* soAdd = dlopen("/data/data/com.example.native_activity/ lib/libfkAdd.so",RTLD_NOW); void* soMain = dlopen("/data/data/com.example.native_activity/ lib/libmain.so",RTLD_NOW); void (*fp_android_main)(struct android_app*) = (void (*)(struct android_app*))dlsym(soMain,"android_main"); fp_android_main(state); dlclose(soMain); dlclose(soAdd); } 6 在 main.c 文件中添加一行,方便測試: __android_log_print(ANDROID_LOG_DEBUG, "fuke", "engine_handle_input 100 + 200 = [%d] ", fkAdd(100, 200)); 7 編譯運行,點擊手機屏幕後,觀察logcat 效果如下: END 注意事項 c++的函數在寫動態鏈接庫的時候,需要注意的是c++的函數會被系統修改,所以做動態庫測試的使用最好用c語言
Ⅳ Android studio中怎麼把代碼類轉換為靜態
進行使用的Android studio中進行對項目中代碼中開發,那在進行對代碼中的類,那麼就需要在代碼中進行輸入代碼中之後,就需要把代碼寫好的類進行轉換為靜態的方法。那麼在android studio怎麼轉出靜態方法呢
1、在Android studio中代碼的編輯器中,進行選中代碼中的文件名類之後。
2、進行選中的然後進行右擊的就會彈出了下拉菜單中進行選擇為「refactor」的選項菜單。
3、這樣就會彈出了下一級菜單中進行選擇「make static」的選項菜單。
4、然後就會彈出了make method static的框中,進行選中」preview「的選項。
5、就會彈出了find refactoring preview的,在下列框中都是為顯示需要轉換為靜態的方法的類。
6、直接進行點擊do refactor的按鈕即可。
7、可以在選中的類的類名添加了一個static的,這樣就是變為了靜態的類的方法了。
Ⅳ 如何在android studio中用JNI調用靜態庫
android ndk開發經常遇到了動態庫的問題,本文主要介紹:
① 動態鏈接庫的生成;
② 在Java和C混合編程的情況下如何調用第三方動態鏈接庫;
③ 使用dlopen程序運行時直接調用;
④ 純c的方式開發調用;
本文重點推薦②和④,第③中太麻煩每個函數都需要dlsym調用一次;
代碼的網路雲鏈接:密碼:c5s3
工具/原料
Win8.1 x64
adt-bundle-windows-x86_64-20140702
android-ndk-r10d
生成動態庫
1
android ndk下面生成動態庫so文件的方法很多,但是這里只提供一種方法,更多的生成方法可以看,「ndk 編譯靜態庫」:
2
fkAdd.c 的內容如下:
#include <jni.h>
int fkAdd(int nX, int nY)
{
return nX + nY;
}
3
Android.mk 的內容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= fkAdd
LOCAL_SRC_FILES:= fkAdd.c
include $(BUILD_SHRRED_LIBRARY)
4
1、打開 eclipse
2、點擊 文件
3、點擊 新建
4、點擊 other...
5
1、展開 Android 選項;
2、選擇 Android Project from Existing Code;
3、點擊 Next
6
1、輸入 Root Director;
2、取消 tests;
3、選中 Copy projects into workspace;
4、點擊 Finish;
7
1、右鍵工程;
2、選擇 Android Tools;
3、Add Native Support...;
8
點擊 Finish
9
修改android sdk 版本為 4.0.3;
關於如何修改 android sdk 版本:
10
修改 Min SDK version:15
修改 Target SDK version:19
步驟閱讀
11
在jni目錄下面新建文件fkAdd.c 的內容如下:
int fkAdd(int nX, int nY)
{
return nX + nY;
}
12
臨時修改 Android.mk 文件內容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#LOCAL_MODULE := hello-jni
#LOCAL_SRC_FILES := hello-jni.c
LOCAL_MODULE := fkaddso
LOCAL_SRC_FILES := fkAdd.c
include $(BUILD_SHARED_LIBRARY)
13
使用快捷鍵Ctrl+B編譯後可以在libs目錄下面看到生成的一些列的
libfkaddso.so文件,如下圖所示
END
Java和c編程調so
1
1、將libs復制一份到jni目錄下面,刪掉其中不相關的文件
2、刪掉文件 jni/fkadd.c 文件
3、將 Android.mk 文件還原成最開始的樣子;
2
修改 hello-jni.c 中的部分代碼,如下:
char szMsg[1024] = {0};
int nSum = fkAdd(100, 10);
sprintf (szMsg, "Hello from JNI ! Compiled with ABI " ABI ". %d ", nSum);
return (*env)->NewStringUTF(env, szMsg);
3
修改 Android.mk 文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := fkaddso
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libfkaddso.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
LOCAL_SHARED_LIBRARIES := fkaddso
include $(BUILD_SHARED_LIBRARY)
4
修改 HelloJni.java 在其中增加一行:
System.loadLibrary("fkaddso");
5
運行工程看效果:
END
用dlopen調用so
1
重復「生成動態庫」中的過程1到10,
2
把需要調用so文件的目錄libs拷貝到jni目錄下面,並修改 Android.mk 文件的內容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := fkaddso
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libfkaddso.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
3
修改 hello-jni.c 的內容如下:
char* szSo = "/data/data/com.example.hellojni/lib/libfkaddso.so";
void* fkAddSo = dlopen(szSo, RTLD_LAZY);
int (*fpAdd)(int,int) = (int (*)(int,int))dlsym(fkAddSo, "fkAdd");
char szMsg[1024] = {0};
int nSum = fpAdd(100, 200);
dlclose(fkAddSo);
sprintf (szMsg, "%s %d", szSo, nSum);
return (*env)->NewStringUTF(env, szMsg);
4
關於如何獲取 so在手機中的路徑,可以通過在控制台下輸入 adb shell 後,
在手機上查詢:
5
編譯後運行效果:
6
方便他人亦是方便自己,如果覺得還行就點下下邊的投票吧,這樣可以幫助其他人更快的找到解決問題的方法;有疑問的也可留言哦, 謝謝!
END
純c的方式開發調用
1
此方法需要感謝ndk吧的吧友提供哦,本人只是負責將其進行了整理,歸納後發帖,謝謝,原始地址:http://tieba..com/p/3247530080
2
根據「生成動態庫」中的過程1到10,新建一個純c的ndk程序:
「D:\Android\android-ndk-r10\samples\native-activity"
3
把會用的so文件的目錄libs拷貝到 jni目錄下面
4
修改 Android.mk 文件,內容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := fkAdd
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libfkAdd.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := main
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_STATIC_LIBRARIES := android_native_app_glue
LOCAL_SHARED_LIBRARIES := fkAdd
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := native-activity
LOCAL_SRC_FILES := NativeActivity.c
LOCAL_LDLIBS := -llog -landroid
LOCAL_STATIC_LIBRARIES := android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-mole,android/native_app_glue)
5
增加 NativeActivity.c 文件,添加內容如下:
#include <jni.h>
#include <errno.h>
#include <dlfcn.h>
#include <android_native_app_glue.h>
void android_main(struct android_app* state) {
// Make sure glue isn't stripped.
app_mmy();
void* soAdd = dlopen("/data/data/com.example.native_activity/
lib/libfkAdd.so",RTLD_NOW);
void* soMain = dlopen("/data/data/com.example.native_activity/
lib/libmain.so",RTLD_NOW);
void (*fp_android_main)(struct android_app*) =
(void (*)(struct android_app*))dlsym(soMain,"android_main");
fp_android_main(state);
dlclose(soMain);
dlclose(soAdd);
}
6
在 main.c 文件中添加一行,方便測試:
__android_log_print(ANDROID_LOG_DEBUG, "fuke", "engine_handle_input 100 + 200 = [%d] ", fkAdd(100, 200));
7
編譯運行,點擊手機屏幕後,觀察logcat 效果如下:
END
注意事項
c++的函數在寫動態鏈接庫的時候,需要注意的是c++的函數會被系統修改,所以做動態庫測試的使用最好用c語言