亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

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

2020-04-11 12:21:32
字體:
來源:轉載
供稿:網友
在使用AndroidNDK開發的時候有個事情是很煩人的,那就是創建本地代碼文件夾,生成本地代碼文件和創建本地代碼的編譯文件。特別是實現本地方法的時候,也是比較煩人的,因為本地方法的名字實在是太長了。它的命名規范是:Java_package-name_class-name_method-name(arguments),稍一不留神就會有拼寫錯誤,而導致長時間的調試。由于不勘忍受這樣的折磨,也為了不重復同樣的事情(DRY-Don't Repeat Yourself),于是就寫了一個Java程序來做這件事。
這個小工具可以逐個檢查Java文件,并創建含有本地方法文件,也即本地代碼文件,生成Android.mk編譯文件并更新Java文件,添加System.loadLibrary。
具體的原則是這樣:
•每個含有本地代碼的Java文件,生成一個本地文件,其內含有該文件中的所有本地方法
•所生成的本地方法是符合標準的JNI,具體的形式是:
復制代碼 代碼如下:

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

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

剩下的工作就是實現本地方法了。
當然這個工具還是有很多問題,歡迎各位反饋,或給出改進意見。
另外,這個工具是用Java寫的,更好的選擇應該是用腳本來寫,如Perl或Python。還有就是,如果能把這個工具集成到ADT中,或是創造一個完全用于NDK開發的集成工具ANDT,能夠像產生R.java那樣的自動生成本地文件。比如做一個ANDT工具,集成到Eclipse中,能夠自動當Java中有本地方法聲明后就自動生成本地文件和編譯文件。這將是多么美好的事情啊,將對NDK的開發有重大的幫助。我想,Google應該會做一專門用于NDK開發的Eclipse插件,或是在ADT中加入對NDK的支持,因為NDK開放的接口越來越多,使用NDK開發者也將越來越多,基于NDK開發的應用也將越來越多(2.3及以后的版本,完全可以只用NDK開發出一個Apk,也就是說用純C/C++來開發應用)。希望這一天早些到來。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线精品播放| 国产精品丝袜高跟| 欧美性猛交xxxx乱大交3| 亚洲电影免费观看高清完整版在线| 精品久久久久久久久国产字幕| 国内外成人免费激情在线视频网站| 久久精品视频在线观看| 91精品国产91久久久| 亚洲精品一二区| 欧美大全免费观看电视剧大泉洋| 91色中文字幕| 国产精品偷伦视频免费观看国产| 久久99国产精品自在自在app| 亚洲精品日韩欧美| 国产精品你懂得| 久久久久成人精品| 国产视频精品一区二区三区| 成人做爰www免费看视频网站| 精品视频在线播放| 国产精自产拍久久久久久| 在线观看国产精品91| 欧美猛交免费看| 午夜精品久久久久久久久久久久久| 中文字幕亚洲欧美日韩高清| 亚洲欧美色婷婷| 亚洲成人久久久| 日韩在线观看视频免费| 久久久久久久久中文字幕| 日韩在线观看免费av| 91色在线视频| 91在线观看免费| 成人看片人aa| 97精品国产97久久久久久春色| 日韩性生活视频| 亚洲aa在线观看| 亚洲香蕉在线观看| 久久久久久亚洲精品中文字幕| 日韩欧美极品在线观看| 日韩一区视频在线| 成人在线视频网站| 欧美专区在线观看| 91丨九色丨国产在线| 国模吧一区二区三区| 国产精品电影久久久久电影网| 日韩av一区在线| 伊人久久久久久久久久久久久| 欧美成人午夜免费视在线看片| 97视频免费看| 精品中文字幕在线2019| 亚洲欧洲自拍偷拍| 国产精品嫩草影院一区二区| 亚洲色图色老头| 超碰91人人草人人干| 欧洲美女7788成人免费视频| 欧美精品激情blacked18| 亚洲精品动漫久久久久| 亚洲综合色激情五月| 91精品国产精品| 色播久久人人爽人人爽人人片视av| 1769国产精品| 成人精品视频99在线观看免费| 国产成人久久久精品一区| 久久影视电视剧免费网站清宫辞电视| 欧美激情性做爰免费视频| 日韩天堂在线视频| 欧美成人三级视频网站| 亚洲一二三在线| 国产欧美一区二区三区久久人妖| 亚洲男人第一网站| 国产99久久精品一区二区永久免费| 国产视频精品在线| 欧美久久久精品| 国精产品一区一区三区有限在线| 欧美性xxxx18| 欧美高清在线播放| 欧美日韩免费区域视频在线观看| 国产精品视频免费在线观看| 亚洲二区在线播放视频| 国产精品免费视频xxxx| 日韩电影大片中文字幕| 国产成人精品免费视频| 久久久综合免费视频| 亚洲网站在线播放| 最近2019年中文视频免费在线观看| 国产精品igao视频| 欧美人与物videos| 日韩精品视频在线观看网址| 久久伊人免费视频| 情事1991在线| 一区二区三区四区精品| 91久久精品国产91久久性色| 亚洲精品福利在线| 亚洲国产另类 国产精品国产免费| 韩国视频理论视频久久| 亚洲一二三在线| 国产精品极品尤物在线观看| 国产成人精品久久二区二区| 这里只有精品视频在线| 欧美黑人巨大xxx极品| 精品国产美女在线| 亚洲第五色综合网| 精品久久久久久久久久久久| 久热精品在线视频| 国产成人免费av电影| 一本色道久久88综合日韩精品| 国产精品91久久久久久| 精品亚洲va在线va天堂资源站| 清纯唯美日韩制服另类| 国产精品一区二区三区久久| 最近2019年日本中文免费字幕| 国产成人亚洲综合91| 2020久久国产精品| 18性欧美xxxⅹ性满足| 亚洲视频日韩精品| 久热精品视频在线免费观看| 国产欧美日韩专区发布| 日本亚洲欧美三级| 欧美日韩另类字幕中文| 亚洲性生活视频在线观看| 91精品国产高清久久久久久| 青草青草久热精品视频在线网站| 日韩中文字幕亚洲| 久久这里只有精品99| 日韩av在线电影网| 中文字幕国产精品| 538国产精品一区二区免费视频| 日韩av电影在线播放| 国产精品久久久久久一区二区| 国模精品视频一区二区三区| 午夜精品三级视频福利| 色av中文字幕一区| 国语自产精品视频在免费| 亚洲摸下面视频| 欧美日韩精品中文字幕| 亚洲欧美色婷婷| 一区二区成人av| 日韩a**中文字幕| 亚洲精品久久久久久久久久久| 欧美国产日韩在线| 亚洲欧美中文日韩在线| 黄网站色欧美视频| 5566成人精品视频免费| 久久久久久久一| 久久视频中文字幕| 91久久在线播放| 亚洲欧美中文日韩v在线观看| 久久久久久久久综合| 91精品国产91久久久久久吃药| 日韩精品在线观看视频| 欧美午夜精品在线| 日韩中文字幕视频| 亚洲精品aⅴ中文字幕乱码| 亚洲www永久成人夜色| 久久人人爽人人| 欧美最猛性xxxxx(亚洲精品)| 国产成人avxxxxx在线看| 国产这里只有精品| 国产精品高潮粉嫩av| 美女啪啪无遮挡免费久久网站| 欧美激情videos| 成人精品视频99在线观看免费| 色先锋久久影院av| 精品视频—区二区三区免费| 久久亚洲国产精品|