欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Android本地代碼生成器詳解

 更新時間:2013年05月23日 09:14:07   作者:  
本篇文章是對Android本地代碼生成器的使用進行了詳細的分析介紹,需要的朋友參考下
在使用AndroidNDK開發(fā)的時候有個事情是很煩人的,那就是創(chuàng)建本地代碼文件夾,生成本地代碼文件和創(chuàng)建本地代碼的編譯文件。特別是實現(xiàn)本地方法的時候,也是比較煩人的,因為本地方法的名字實在是太長了。它的命名規(guī)范是:Java_package-name_class-name_method-name(arguments),稍一不留神就會有拼寫錯誤,而導致長時間的調(diào)試。由于不勘忍受這樣的折磨,也為了不重復同樣的事情(DRY-Don't Repeat Yourself),于是就寫了一個Java程序來做這件事。
這個小工具可以逐個檢查Java文件,并創(chuàng)建含有本地方法文件,也即本地代碼文件,生成Android.mk編譯文件并更新Java文件,添加System.loadLibrary。
具體的原則是這樣:
•每個含有本地代碼的Java文件,生成一個本地文件,其內(nèi)含有該文件中的所有本地方法
•所生成的本地方法是符合標準的JNI,具體的形式是:
復制代碼 代碼如下:

return-type Java_package-name_class-name_method-name(arguments){
       }

也就是說,所需要做的只是實現(xiàn)這個方法。
•默認本地代碼共享庫的名字是Android項目的名字
有了這個小工具,就可以只在Java中聲明本地方法,運行下這個工具,然后實現(xiàn)本地方法,再編譯就可以了。
可以從<這里下載>這個小工具。解壓后有三個文件一個是Java源碼,一個是Jar包(genjni.jar),一個是Shell腳本(genjni.sh)。放上源碼的原因是,如果有興趣的朋友可以進行改進,但是改進后請
發(fā)我一份。下載后,最好修改下Shell腳本,把Jar文件的路徑改成具體的存放路徑,否則會報出找不到Jar文件的錯誤。最后把genjni.sh放到~/bin下面,為了使用時方便。使用的時候要在Android項目的根目錄下面運行genjni.sh就可以了。
下面以一個實例方式演示下這個小工具的使用方法:
創(chuàng)建一個項目叫HelloJni,并創(chuàng)建一個HelloJniActivity,在其內(nèi)聲明一個本地方法getStringFromJni();并用有一個TextView用來顯示getStringFromJni()返回的信息。另一個本地方法getStatusFromJni(int)是為了顯示用的,沒有使用。這是Java代碼:
復制代碼 代碼如下:

package com.hilton.hellojni;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloJniActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView text = (TextView) findViewById(R.id.text);
        text.setText(getStringFromJni());
    }

    private native String getStringFromJni();
    private native int getStatusFromJni(int type);
}

寫好Java代碼后,從終端進入到項目的根目錄下
復制代碼 代碼如下:

$cd HelloJni
$ls
AndroidManifest.xml  assets  bin  default.properties  gen  proguard.cfg  res  src
$genjni.sh
appplication HelloJni
package name: com.hilton.hellojni
class name: HelloJniActivity
$ls
AndroidManifest.xml  assets  bin  default.properties  gen  jni  proguard.cfg  res  src
$ls jni
Android.mk  HelloJniActivity.c

打開查看Android.mk和HelloJniActivity.c
復制代碼 代碼如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := HelloJni
LOCAL_SRC_FILES := HelloJniActivity.c
include $(BUILD_SHARED_LIBRARY)

復制代碼 代碼如下:

#include <jni.h>
jstring Java_com_hilton_hellojni_HelloJniActivity_getStringFromJni(JNIEnv* env, jobject thiz) {
}
jint Java_com_hilton_hellojni_HelloJniActivity_getStatusFromJni(JNIEnv* env, jobject thiz, jint type) {
}

再查看HelloJniActivity.java也被更新了,里面多了加載共享庫的語句:
復制代碼 代碼如下:

package com.hilton.hellojni;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloJniActivity extends Activity {
    static {
        System.loadLibrary("HelloJni");
    }
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView text = (TextView) findViewById(R.id.text);
        text.setText(getStringFromJni());
    }

    private native String getStringFromJni();
    private native int getStatusFromJni(int type);
}

剩下的工作就是實現(xiàn)本地方法了。
當然這個工具還是有很多問題,歡迎各位反饋,或給出改進意見。
另外,這個工具是用Java寫的,更好的選擇應該是用腳本來寫,如Perl或Python。還有就是,如果能把這個工具集成到ADT中,或是創(chuàng)造一個完全用于NDK開發(fā)的集成工具ANDT,能夠像產(chǎn)生R.java那樣的自動生成本地文件。比如做一個ANDT工具,集成到Eclipse中,能夠自動當Java中有本地方法聲明后就自動生成本地文件和編譯文件。這將是多么美好的事情啊,將對NDK的開發(fā)有重大的幫助。我想,Google應該會做一專門用于NDK開發(fā)的Eclipse插件,或是在ADT中加入對NDK的支持,因為NDK開放的接口越來越多,使用NDK開發(fā)者也將越來越多,基于NDK開發(fā)的應用也將越來越多(2.3及以后的版本,完全可以只用NDK開發(fā)出一個Apk,也就是說用純C/C++來開發(fā)應用)。希望這一天早些到來。
您可能感興趣的文章:

相關文章

  • Android實現(xiàn)靜音檢測功能

    Android實現(xiàn)靜音檢測功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)靜音檢測功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解Android的網(wǎng)絡數(shù)據(jù)存儲

    詳解Android的網(wǎng)絡數(shù)據(jù)存儲

    LeanCloud是一種簡單高效的數(shù)據(jù)和文件存儲服務,本文主要介紹了利用LeanCloud來進行網(wǎng)絡數(shù)據(jù)的存儲的實現(xiàn)方法。具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • Android仿微信QQ聊天頂起輸入法不頂起標題欄的問題

    Android仿微信QQ聊天頂起輸入法不頂起標題欄的問題

    這篇文章主要介紹了Android之仿微信QQ聊天頂起輸入法不頂起標題欄問題,本文實例圖文相結合給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Windows下獲取Android 源碼方法的詳解

    Windows下獲取Android 源碼方法的詳解

    本篇文章是對在Windows下獲取Android 源碼的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Android基于開源項目xutils3實現(xiàn)下載

    Android基于開源項目xutils3實現(xiàn)下載

    這篇文章主要介紹了Android基于開源項目xutils3實現(xiàn)下載,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Android利用Hero實現(xiàn)列表與詳情頁無縫切換動畫

    Android利用Hero實現(xiàn)列表與詳情頁無縫切換動畫

    本文我們將利用Hero動畫實現(xiàn)一個簡單案例:實現(xiàn)列表與詳情頁無縫切換動畫,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
    2022-06-06
  • Android搭建grpc環(huán)境過程分步詳解

    Android搭建grpc環(huán)境過程分步詳解

    本篇文章使用的IDE是Android Studio。這里先吐槽一句,安卓項目搭建grpc環(huán)境,不管是引入插件還是引入第三方庫,對于版本的要求都極為苛刻,一旦版本不匹配就會報錯,所以對于版本的搭配一定要注意
    2023-04-04
  • Android編程中光線傳感器的調(diào)用方法詳解

    Android編程中光線傳感器的調(diào)用方法詳解

    這篇文章主要介紹了Android編程中光線傳感器的調(diào)用方法,結合實例形式分析了Android光線傳感器的調(diào)用方法、函數(shù)、屬性相關使用技巧,需要的朋友可以參考下
    2017-08-08
  • Android實現(xiàn)錄音監(jiān)聽動畫的示例代碼

    Android實現(xiàn)錄音監(jiān)聽動畫的示例代碼

    在很多app種內(nèi)置了語音助手,也存在各種動畫,這篇文章主要為大家詳細介紹了Android實現(xiàn)錄音監(jiān)聽動畫的示例代碼,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • Android編程實現(xiàn)調(diào)用系統(tǒng)分享功能示例

    Android編程實現(xiàn)調(diào)用系統(tǒng)分享功能示例

    這篇文章主要介紹了Android編程實現(xiàn)調(diào)用系統(tǒng)分享功能,結合實例形式分析了Android實現(xiàn)針對文字、圖片等元素分享功能的相關操作技巧,需要的朋友可以參考下
    2017-01-01

最新評論