編輯:關於Android編程
1.環境配置
(溫馨提示,圖片看不清楚的,可以點擊鼠標右鍵,在新選項卡中查看圖片^^)
1)打開studio建立新的工程,打開如下位置,下載紅線所示的ndk及LLDB工具。
2)如下所示對ndk進行設置

3)替換掉原來的gradle工具,如圖注釋掉上面的,加入下面的代碼。

4)修改app下面的gradle文件

給出完整代碼,仔細辨別
apply plugin: 'com.android.model.application'
model { //這一行是新加的,對應上邊的修改,
/**
* 這裡要注意一下,如果使用gradle-experimental,參數賦值要使用 = 號,而不是空格,
* 所以要把原來文件中的空格都用等號去替換;
* 還有一部分參數使用的函數也與原來不一樣,
* 實在不能確定的就找出ndk samples中的build.gradle文件對比一下。
*/
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig {
applicationId = "com.ndk.zhang"
minSdkVersion.apiLevel = 10 //這兩個參數和原來有點不一樣,多了apiLevel
targetSdkVersion.apiLevel = 23
versionCode = 1
versionName = "1.0"
}
ndk { //NDK設置
moduleName = "test" //動態庫的名稱
toolchain = 'clang' //編譯器,據說這個比gcc要快,沒有這個寫native代碼時沒有自動補全的功能
CFlags.addAll(['-Wall', '-DHELLO_2']) //對應gcc中的編譯選項 CFLAGS,方括號內是一個數組,可以有多個值
CFlags.add("-DHELLO_3")
// CFlags += "-DHELLO" //這種方式在這裡行不通,包括以下的ldFlags, ldLibs 也一樣.
ldFlags.addAll(["-L../lib"]) //庫文件路徑
ldLibs.addAll(['log']) //庫文件名
stl = "stlport_static" //指示使用動態庫還是靜態庫
}
buildTypes {
release {
minifyEnabled = true
proguardFiles.add(file('proguard-rules.pro')) //這是把原來的改成這樣的
}
debug {
ndk.debuggable = true //有這個才會支持調試native 代碼,這個放到release裡一樣能用
}
}
productFlavors { /** copy過來的,根據不同的平台,會有不同的配置 */
// for detailed abiFilter descriptions, refer to "Supported ABIs" @
// https://developer.android.com/ndk/guides/abis.html#sa
create("arm") {
ndk.abiFilters.add("armeabi")
}
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
}
create("arm8") {
ndk.abiFilters.add("arm64-v8a")
}
create("x86") {
ndk.abiFilters.add("x86")
}
create("x86-64") {
ndk.abiFilters.add("x86_64")
}
create("mips") {
ndk.abiFilters.add("mips")
}
create("mips-64") {
ndk.abiFilters.add("mips64")
}
// To include all cpu architectures, leaves abiFilters empty
// create("all")
}
}
} //這個是對就 model{
//android {
// compileSdkVersion 23
// buildToolsVersion "23.0.2"
//
// defaultConfig {
// applicationId "com.ndk.zhang"
// minSdkVersion 10
// targetSdkVersion 23
// versionCode 1
// versionName "1.0"
// }
// buildTypes {
// release {
// minifyEnabled false
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// }
// }
//}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
}

完整代碼
public class Test {
static {
System.loadLibrary("test");
}
public native void test();
}
6)新建jni文件夾

7)這個時候Test.java文件是提示錯誤的,alt+enter出現如下效果

8)點擊這個Create function ...即可生成.c文件在jni文件夾。打開c文件輸入代碼,結果如圖

完整代碼
#include#include "android/log.h" JNIEXPORT void JNICALL Java_com_ndk_zhang_Test_test(JNIEnv *env, jobject instance) { __android_log_write(ANDROID_LOG_ERROR,"TAG","TEST"); }
9)Terminal進入到src/main/java下面

10)debug起來,如果出現如下log說明成功了
11)如果想進行調試,很簡單。選擇app-native,然後在c文件中打斷點就可以進行調試了。注意,如果出現手機卡在debug頁面不動的情況,可以點擊sudio的Run->attach debugger to android process就可以了。
其它問題慢慢補充,有問題可以留言。
補充
1.發現生成.so文件找不到,網上說到build->intermediates->ndk查找,但是死活找不到,後來發現在build->intermediates->binaries文件下面。
2.生成so文件方法,rebuild project是一種,其實只要跑完debug模式就會有debug版本的so生成,如果進行apk打包操作就會有release版本生成。
3.補充個app下面gradle文件的配置信息。注釋部分刪除掉無影響。而且很多語句也沒用上所以也注釋掉了。
apply plugin: 'com.android.model.application'
model { //這一行是新加的,對應上邊的修改,
/**
* 這裡要注意一下,如果使用gradle-experimental,參數賦值要使用 = 號,而不是空格,
* 所以要把原來文件中的空格都用等號去替換;
* 還有一部分參數使用的函數也與原來不一樣,
* 實在不能確定的就找出ndk samples中的build.gradle文件對比一下。
*/
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig {
applicationId = "com.ndk.zhang"
minSdkVersion.apiLevel = 10 //這兩個參數和原來有點不一樣,多了apiLevel
targetSdkVersion.apiLevel = 23
versionCode = 1
versionName = "1.0"
}
ndk { //NDK設置
moduleName = "test" //動態庫的名稱
toolchain = 'clang' //編譯器,據說這個比gcc要快,沒有這個寫native代碼時沒有自動補全的功能
// CFlags.addAll(['-Wall', '-DHELLO_2']) //對應gcc中的編譯選項 CFLAGS,方括號內是一個數組,可以有多個值
// CFlags.add("-DHELLO_3")
// // CFlags += "-DHELLO" //這種方式在這裡行不通,包括以下的ldFlags, ldLibs 也一樣.
// ldFlags.addAll(["-L../lib"]) //庫文件路徑
ldLibs.addAll(['log']) //庫文件名
// stl = "stlport_static" //指示使用動態庫還是靜態庫
}
buildTypes {
release {
minifyEnabled = true
proguardFiles.add(file('proguard-rules.pro')) //這是把原來的改成這樣的
}
debug {
ndk.debuggable = true //有這個才會支持調試native 代碼,這個放到release裡一樣能用
}
}
productFlavors { /** copy過來的,根據不同的平台,會有不同的配置 */
create("all"){
}
}
}
}
4.針對生成so文件的問題說一下,如果根據補充中2,3步都生成不成功,建議利用補充中第3步文件進行替換,因為我是再改成3中代碼後找到的so文件,目前也不清楚是gradle文件導致的,還是我開始沒仔細看所以沒找到,這裡不再測試,知道的同學麻煩留言告知一下。這裡主要補充一個proguard說明,針對那些對Proguard不熟悉的同學,請在你的Proguard文件中加上如下代碼,此代碼是為了防止你打包的時候被混淆,最後報錯。
-keepclasseswithmembers,allowshrinking class * {
native ;
}
5.愛看英文的給個官方網址,搭建方式跟這個一樣http://tools.android.com/tech-docs/new-build-system/gradle-experimental。
android:android Intent and IntentFilter
1,intentfilter說明:如果說是將一個activity有其他應用打開,或者是在webView 或者 bybird app中調用我們自己的activi
android 百度地圖離線地圖功能
最近做了一個百度地圖離線地圖的功能,雖然功能實現了,但過程中也碰到了一些問題。首先,看看效果圖吧。 1、離線地圖相關APIAPI地址:http://wiki.lbsyu
淘淘商城---8.7
昨天將框架整合完成,現在我主要實現昨天的需求,實現商品的列表查詢,這時要涉及到jsp和serveilet知識,不清楚的朋友可以趕緊去補充下知識。1、商品列表的實現1.1、
Android設計模式系列--工廠方法模式
工廠方法模式,往往是設計模式初學者入門的模式,的確,有人稱之為最為典型最具啟發效果的模式。android中用到了太多的工廠類,其中有用工廠方法模式的,當然也有很多工廠並不