編輯:關於Android編程
以C++實現讀寫文件,Java調用為例。包括中文路徑的傳遞和數組的傳入傳出。
1.環境准備
安裝JDK,作者的是64位版本1.8.0_60,並正確配置環境變量。
安裝adt,作者用的是adt-bundle-windows-x86_64-20131030,需要的可以去我的網盤下載。http://pan.baidu.com/s/1ntZ5V7b
安裝ndk,作者用的是android-ndk-r9,需要的可以去我的網盤下載。http://pan.baidu.com/s/1c1foakg
2.環境搭建
(1) 新建Android工程
File->New->Android Application Project
Application Name:WriteReadJ,其它都是默認。
(2)點擊菜單欄Window->Preferences,彈出的Preferences對話框中,選擇Android->NDK,填寫NDK Location,即android-ndk-r9c的位置。
(3) 項目中新建jni文件夾,該文件夾用於放置C/C++源文件等。
(4) 配置jni的自動編譯選項Builder
步驟如下所示,英文原文:http://mobilepearls.com/labs/ndk-builder-in-eclipse/
(a) 新建一個Builder,Project->Properties->Builders->New。
(b) 在彈出的Choose configuration type對話框,雙擊Program(或選擇Program,點擊OK)。
(c) 在彈出的Edit Configuration對話框中,Name輸入新Builders的名字(任意取)。
配置選項卡Main。
Location中輸入ndk-build.cmd的路徑,可以點擊Browser File System按鈕來選擇路徑。
Working Directory輸入,點擊Browser Workspace選擇WriteReadJ。
配置選項卡Refresh
勾選Refresh resources upon completion.
選擇The entire workspace
勾選Recursively include sub-folders
配置選項卡Build options
勾選After a "Clean"(勾選這個操作後,只需要Clean一下項目,就開始交叉編譯)
勾選During manual builds
勾選During auto builds
勾選 Specify working set of relevant resources
點擊Specify Resources...勾選WriteReadJ項目的jni目錄,點擊Finish。
點擊OK,環境搭建完成。
3.編寫java代碼(參見JNI Windows平台)
(1) 新建一個類
Package:com.yiluboke.zxy
Name:WriteReadJ
其它都是默認
(2) 修改MainActivity中onCreate的代碼
4.在jni文件夾下,創建文件,編寫C++代碼(參見JNI Windows平台)
(1) 找到Android項目中bin目錄下的classes文件夾,該目錄下有eclipse自動生成的字節碼文件。
打開cmd,在\WriteReadJ\bin\classes路徑下,輸入命令javah com.yiluboke.zxy.WriteReadJ,回車。
\WriteReadJ\bin\classes目錄下,生成頭文件com_yiluboke_zxy_WriteReadJ.h,將此文件拷貝入jni目錄下中。
(2) 編寫C++代碼。
5.在jni文件夾下,新建文件Android.mk和Applcation.mk,內容分別如下:
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CPP_EXTENSION := .cpp
LOCAL_MODULE := jniwritereadfile
LOCAL_SRC_FILES := com_yiluboke_zxy_WriteReadJ.cpp writeReadDo.cpp
include $(BUILD_SHARED_LIBRARY)
Applcation.mk
APP_MODULES := jniwritereadfile
APP_ABI := all
APP_PLATFORM := android-19
APP_STL := stlport_static
LOCAL_PATH C/C++代碼所在目錄,即jni目錄。
my-dir是編譯系統提供的宏函數,返回Android.mk所在目錄的路徑。
LOCAL_CPP_EXTENSION 要編譯文件的擴展名
LOCAL_MODULE 要編譯的庫的名稱。編譯器會自動在前面加上lib,後面加上.so。
LOCAL_SRC_FILES 要編譯的C/C++文件。
具體詳情自行百度。
6.AndroidManifest.xml中添加下面的代碼設置讀寫SD卡的權限
<!--在SDCard中創建與刪除文件權限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard寫入數據權限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 從SDCard讀取數據權限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
7.點擊Project->Clean->選中WriteReadJ,會自動編譯,可以看到libs目錄下libjniwritereadfile.so文件編譯完成。
8.運行WriteReadJ工程
使用真機運行。
由於沒帶真機,就用模擬器看下效果吧。
9.完整Demo下載
百度網盤地址:http://pan.baidu.com/s/1geyKTUj
本文采用的JDK是 64位版本1.8.0_60。
編譯錯誤:
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
AndroidManifest.xml修改SDK為合適的版本。
作者的:
修改為
<uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="19" />
Android動畫效果一直是人家中十分重要的一部分,從早期的Android版本中,由於動畫機制和繪圖機制的不健全,Android的人機交互備受诟病,Android從4.X
我在前面的一片博客中,介紹了jPBC 2.0.0在PC平台上面的配置和測試。既然jPBC是Java平台上面實現的,那麼jPBC能不能在Android這個以Java為主要語
2.4.1適配器組件適配器的作用適配器充當適配器控件和該視圖數據之間的橋梁。適配器提供訪問的數據項,並負責產生數據組中的每個項的視圖。常用的適配器BaseAdapter:
2.3.1 布局介紹 布局用於定義Activity中UI元素的排列結構,Android提供了LinearLayout線性布局、RelativeLayout相對布局 、Fr