欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

androidcpp的簡(jiǎn)單介紹

如何調(diào)試android NDK 交叉編譯的cpp文件

主要講一下具體的步驟,具體的ndk指令我就不說了,貼的文章都有:

創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、劍閣網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開發(fā)、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為劍閣等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

首先是寫一個(gè).java文件,本例中是HprofDumper.java

具體如下:

public class HprofDumper {

public native boolean hprofDumper(String filename, String outname);

}

然后用命令javac HprofDumper.java 生成.class文件

再用javah HprofDumper 生成相應(yīng)的.h文件

生成的.h文件如下

#include

#ifndef _Included_HprofDumper

#define _Included_HprofDumper

#ifdef __cplusplus

extern "C" {

#endif

JNIEXPORT jboolean JNICALL Java_HprofDumper_hprofDumper

(JNIEnv *, jobject, jstring, jstring);

#ifdef __cplusplus

}

#endif

#endif

然后只需要在對(duì)應(yīng)的.cpp文件完成相應(yīng)函數(shù)即可,核心代碼如下:

#include "HprofDumper.h"

#include "hprof.h"

JNIEXPORT jboolean JNICALL Java_HprofDumper_hprofDumper

(JNIEnv *env, jobject obj, jstring in_file, jstring out_file)

{

const char *filename = env-GetStringUTFChars(in_file, 0);

const char *outname = env-GetStringUTFChars(out_file, 0);

return hprof_dump(filename, outname);

}

其中hprof_dump是純c++代碼,引入即可。

有一點(diǎn)需要注意,標(biāo)紅了已經(jīng),就是生成的.h文件函數(shù)并沒具體形參名字,只有形參類型,在.cpp文件中要加入相應(yīng)的形參名字,本例為env、 obj、 in_file和out_file。

還有一點(diǎn)c和c++的區(qū)別,就是env的使用。

本例中C++為env-GetStringUTFChars(in_file, 0);

如果是C就應(yīng)該改為(env)-GetStringUTFChars(env,in_file, 0);

調(diào)用Java類型 : C中調(diào)用Java中的String類型為 jstring;

C語言方法名規(guī)則 : Java_完整包名類名_方法名(JNIEnv *env, jobject thiz), 注意完整的類名包名中包名的點(diǎn)要用 _ 代替;

參數(shù)介紹 : C語言方法中有兩個(gè)重要的參數(shù), JNIEnv *env, jobject thiz ;

-- JNIEnv參數(shù) : 該參數(shù)代表Java環(huán)境, 通過這個(gè)環(huán)境可以調(diào)用Java中的方法;

-- jobject參數(shù) : 該參數(shù)代表調(diào)用jni方法的類,;

調(diào)用jni.h中的NewStringUTF方法 : 該方法的作用是在C語言中創(chuàng)建一個(gè)Java語言中的String類型對(duì)象, jni.h中是這樣定義的 jstring (*NewStringUTF)(JNIEnv*, const char*), JNIEnv 結(jié)構(gòu)體中包含了 NewStringUTF 函數(shù)指針, 通過 JNIEnv 就可以調(diào)用這個(gè)方法;

完成代碼編寫后,在當(dāng)前目錄下完成Android.mk和Application.mk的編寫

首先是Android.mk

本例中為:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := hprof-dumper

LOCAL_C_INCLUDES += external/stlport/stlport

LOCAL_C_INCLUDES += bionic

LOCAL_C_INCLUDES += bionic/libstdc++/include

LOCAL_SRC_FILES := HprofDumper.cpp \

xx.cpp \

xx.cpp \

xx.cpp \

xx.cpp \

xx.cpp \

xx.cpp \

xxx.cpp

LOCAL_SHARED_LIBRARIES := libstlport

include $(BUILD_SHARED_LIBRARY)

注意標(biāo)紅的是最關(guān)鍵的,LOCAL_C_INCLUDES 顧名思義是需要的頭文件的所在的目錄,那三個(gè)參數(shù)主要為了引入STL,最重要?。OCAL_SHARED_LIBRARIES 我一直生成失敗就是沒加這個(gè)參數(shù),不光要引入頭文件,還要引入具體的lib,這就是這個(gè)字段的作用。

具體字段的作用:

-- LOCAL_PATH : 代表mk文件所在的目錄;

-- include $(CLEAR_VARS) : 編譯工具函數(shù), 通過該函數(shù)可以進(jìn)行一些初始化操作;

-- LOCAL_MODULE : 編譯后的 .so 后綴文件叫什么名字;

-- LOCAL_SRC_FILES: 指定編譯的源文件名稱;

-- include $(BUILD_SHARED_LIBRARY) : 告訴編譯器需要生成動(dòng)態(tài)庫;

Applicaion.mk中就一行

APP_STL = stlport_static

表示使用stl靜態(tài)庫。

注意:我用了STL,大家沒有用STL的當(dāng)然不用引入這些啦~

android用cmake怎么導(dǎo)入cpp文件夾,undifined reference to

ndroid Studio升級(jí)到2.2之后,我們可以先配置好NDK開發(fā)的一些所需工具,如圖,在SDK Tools中勾選安裝CMake、LLDB、NDK。

CMake: 外部構(gòu)建工具。如果你準(zhǔn)備只使用 ndk-build 的話,可以不使用它。

LLDB: Android Studio上面調(diào)試本地代碼的工具。

Android Studio自帶DEMO了解CMAKE

Android Studio升級(jí)到2.2版本之后,在創(chuàng)建新的project時(shí),界面上多了一個(gè)Include C++ Support的選項(xiàng)。勾選它之后將會(huì)創(chuàng)建一個(gè)默認(rèn)的C++與JAVA混編的Demo程序。就讓我們先來看看這個(gè)官方標(biāo)準(zhǔn)Demo吧。

開始之前最好先下載好NDK,見NDK開發(fā) 從入門到放棄(一:基本流程入門了解),即在Project Structure界面Android NDK location處下載或選擇正確的路徑。或者使用上方提供的工具安裝方法來進(jìn)行下載。否則,創(chuàng)建的新project也會(huì)報(bào)錯(cuò),需要配置好后clean。

File - New - New Project,在如下界面中勾選Include C++ Support,然后一路 Next,直到 Finish 為止即可。

項(xiàng)目打開后我們查看目錄結(jié)構(gòu),與常規(guī)項(xiàng)目不同的是多了.externalNativeBuild文件夾、cpp文件夾、CMakeLists.txt文件,如下圖:

這三個(gè)東西都是NDK部分:

1. .externalNativeBuild文件夾:cmake編譯好的文件, 顯示支持的各種硬件等信息。系統(tǒng)生成。

2. cpp文件夾:存放C/C++代碼文件,native-lib.cpp文件是該Demo中自帶的,可更改。需要自己編寫。

3. CMakeLists.txt文件:CMake腳本配置的文件。需要自己配置編寫。

Gradle中也有兩處不同:

java代碼:

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// Example of a call to a native method

TextView tv = (TextView) findViewById(R.id.sample_text);

tv.setText(stringFromJNI());

}

/**

* A native method that is implemented by the 'native-lib' native library,

* which is packaged with this application.

*/

public native String stringFromJNI();

// Used to load the 'native-lib' library on application startup.

static {

System.loadLibrary("native-lib");

}

}12345678910111213141516171819202122231234567891011121314151617181920212223

從native-lib.cpp的代碼中我們能看到它使用的是靜態(tài)注冊(cè)的方式,動(dòng)態(tài)注冊(cè)的方式代碼同傳統(tǒng)JNI。

#include jni.h

#include string

extern "C"

jstring

Java_com_example_person_myapplication_MainActivity_stringFromJNI(

JNIEnv* env,

jobject /* this */) {

std::string hello = "Hello from C++";

return env-NewStringUTF(hello.c_str());

}12345678910111234567891011

CMakeLists.txt文件中我們需要注意的是下面這三個(gè)地方。兩個(gè)library的名字(需一致)以及一個(gè)cpp文件的路徑,彼此需要對(duì)應(yīng)一致,當(dāng)我們自己定義library以及自己創(chuàng)建cpp文件時(shí)需要對(duì)應(yīng)修改。

如何在Android上運(yùn)行cpp-tests

Download Cocos2d-x

Download cocos2d-x and unzip it. We could simply unzip it on the root directory of your home folder. After unzipping, double click the cocos2d-xfolder and you should have a structure like this:

Download JDK, SDK and NDK

For developing Android games Java is a must have toolkit.

check your Java version.

java -version

Hopefully you see results similar to: (although your version may be slightly different.)

java version "1.8.0_05"

Java(TM) SE Runtime Environment (build 1.8.0_05-b13)

Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

If not, you need to download and install Java before proceeding JDK

Download the Android SDK.

ADT Bundle For Mac

ADT Bundle For Windows (32-bit)

ADT Bundle For Windows (64-bit)

ADT Bundle For Linux (32-bit)

ADT Bundle For Linux (64-bit)

The bundle includes the newest Android SDK version plus an Eclipse version with Android Development Tool included. This is all you need.

After downloading it, unzip the package at ~/AndroidDev directory. The folder contains two folders: *sdk* and *eclipse*.

You can launch Eclipse and install other SDK versions, if needed. Here is an example:

Download NDK. Always use the latest version. This article version is r9d.

After downloading it, unzip the package at the same location of the Android SDK. In our case, it is under the *~/AndroidDev* directory.

Verify Your Environment

verify that *Python 2.7* is installed and it is accessible:

python --version in your Terminal (or cmd on Win32) and it will give you the following result:

$ python --version

Python 2.7.5

If not, you need to download and install Python before proceeding.

Hombrew brew install python

Python.org

Install and verify Apache Ant

Hombrew brew install ant

Apache.org

verify that Ant is found, simply execute:

$ ant

Buildfile: build.xml does not exist!

Build failed

Setup Environment Variables

Run setup.py to configure your Android development environment. This will set the necessary environment variables needed. If you haven't configured this environment before, you will be prompted to enter paths for variables that are not found.

Caution: You must not use the ~ sign. Use the full path to your home directory. Otherwise, the scripts will fail due to error path value.

In your cocos2d-x directory runpython setup.py and you will get the following results:

*COCOS2D_CONSOLE_ROOT* environment variable to point to the bin directory under ~/cocos2d-x/tools/cocos2d-console directory.

*NDK_ROOT* environment variable to point to the location of where you put the NDK. (i.e android-ndk-r9d/)

*ANDROID_SDK_ROOT* environment variable to point to the location of where you put the adt-bundle. Example /Users/guanghui/AndroidDev/adt-bundle-mac-x86_64-20130522/sdk/. The adt-bundle-mac-x86_64-xxxx, the xxxx number maybe different. So please note this non-trival difference.

*ANT_ROOT* environment variable to point to the location of where you put apache-ant-x.x.x. The apache-ant-x.x.x, the x.x.x number maybe different. So please note this non-trival difference.

When all environment variables are correctly configured, you should let them take effect.

On *nix systems, you could issue the following commands:

source ~/.bash_profile

on win32 system, you can just close the command line windows and restart it.

Use android-build.py to build cocos2d-x samples

Change your directory to the where the android-build.py script is located. (usually cocos2d-x/build)

cd build

and then

android list targets

Notice the id in this next screen shot.

Now I can execute:

python android-build.py -p 19 cpp-tests

That's it! The script will handle everything else that you need. When finished you should get the following message:

How to deploy it on your Android phone via command line

Enable USB Debugging on your phone and then connect your phone via USB.

Change your directory to the the bin directory of testcpp android project:

cd ~/cocos2d-x/tests/cpp-tests/proj.android/bin

(Note:If your current directory is build, you could use some relative path like thiscd ../tests/cpp-tests/proj.android/bin)

Then you could use adb to install the apk to your android phone:

adb install TestsDemo-debug.apk

If it prompts you that adb is not a command, you must re-equery your ~/.bashrc file. Ensure it contains the 4 environment variables set above. You could also manually execute:

export PATH=$PATH:$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools

You should see the following screenshot! You are done.

我有個(gè) 安卓手機(jī) 下載了個(gè)文件查看器,程序顯示有查看cpp文件的功能,但是我卻打不開cpp文件.

cpp是c++源代碼文件,只不過擴(kuò)展名不同而已,內(nèi)部文件格式與txt一樣。

其實(shí)最笨也是最好用的辦法就是:將.cpp文件擴(kuò)展名改為.txt,在手機(jī)中進(jìn)行編輯整理后,可以再將擴(kuò)展名改回來。

這應(yīng)該是對(duì)付這種文件最好的辦法。

Android | 內(nèi)存指標(biāo)與分析方法

這篇文章的內(nèi)容會(huì)涉及以下前置 / 相關(guān)知識(shí),貼心的我都幫你準(zhǔn)備好了,請(qǐng)享用~

這篇文章偏底層,難免有寫錯(cuò)的地方還請(qǐng)你多多斧正哦~

Android 系統(tǒng)包括三種不同類型的內(nèi)存:RAM、zRAM 和 ROM:

對(duì)于內(nèi)核來說,無論是內(nèi)核進(jìn)程還是用戶進(jìn)程,說到底都是 task_struct 結(jié)構(gòu)體的一個(gè)實(shí)例。task_struct 也叫進(jìn)程描述符(process descriptor),里面記錄了進(jìn)程相關(guān)的所有信息。

在 task_struct 中有一個(gè) mm_struct 的數(shù)據(jù)結(jié)構(gòu),也叫內(nèi)存描述符(memory descriptor),里面記錄了 Linux 進(jìn)程內(nèi)存管理的所有信息。mm_struct 定義在 linux/mm_types.h 頭文件中,其中有一個(gè)頁(page)的數(shù)據(jù)結(jié)構(gòu):

—— 圖片引用自網(wǎng)絡(luò)

頁(Page)是 Linux 內(nèi)核進(jìn)行內(nèi)存管理的基本單位,通常一個(gè)頁的大小為 4 KB 。根據(jù)頁面是否使用分為 “可用頁” 和 “已使用頁” 兩種,其中已使用頁可以分為以下類別:

緩存頁是指有存儲(chǔ)器中的文件支持的內(nèi)存,分為兩種: 私有頁 共享頁 :

匿名頁是沒有存儲(chǔ)器中的文件支持的內(nèi)存(例如由設(shè)置了 MAP_ANONYMOUS 標(biāo)志的 mmap() 進(jìn)行分配)

為了避免應(yīng)用濫用內(nèi)存,Android 系統(tǒng)會(huì)限制應(yīng)用可以申請(qǐng)的最大堆內(nèi)存,超過此限制就會(huì)拋出 OOM 異常。Android 設(shè)備出廠后,最大堆內(nèi)存就已經(jīng)確定,相關(guān)的配置位于系統(tǒng)根目錄 /system/build.prop 文件中,我們可以通過命令查看:

在 App 虛擬機(jī)啟動(dòng)時(shí),會(huì)讀取 /system/build.prop 文件的配置,源碼位于: AndroidRuntime.cpp

需要注意的是,配置 dalvik.vm.heapgrowthlimit 限制的僅僅是 Java 堆內(nèi)存,本地內(nèi)存不受其限制的。換句話說,應(yīng)用可以使用的最大內(nèi)存其實(shí)是可以大于最大堆內(nèi)存的。

在確定進(jìn)程占用了多少內(nèi)存時(shí),必須考慮多個(gè)進(jìn)程共享頁的情況。在 Linux 里,一個(gè)進(jìn)程占用的內(nèi)存有四種指標(biāo),分別是:

一般來說內(nèi)存占用大小有如下規(guī)律:VSS = RSS = PSS = USS。

—— 圖片引用自 Android Developers

—— 圖片引用自 —— sunsky303 著

關(guān)于輸出信息的具體分析,建議直接看 Gityuan 的這篇文章: 《Android 內(nèi)存分析命令》 ,已經(jīng)寫得非常詳細(xì)了。

如何讓工程調(diào)用的是android的.cpp而不是調(diào)用的cocos2dx的.cpp

cocos2d-x在win32上開發(fā)出來的代碼還需要交叉編譯后才能生成android可以使用的包,具體操作見這個(gè)文檔 另:使用cocos2d-x引擎的優(yōu)勢(shì)在于便于移植性。其開發(fā)出的C++代碼只要在各上只要稍加改動(dòng)就可以使用。

當(dāng)前名稱:androidcpp的簡(jiǎn)單介紹
分享URL:http://aaarwkj.com/article42/dsigjec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、、搜索引擎優(yōu)化微信公眾號(hào)、軟件開發(fā)、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)
日韩国产推荐一区二区| 日韩最新视频一区二区三| 中文字幕精品一区二区三区在线 | 日韩商清av毛片网站| 日韩精选视频在线播放| 插美女逼免费视频导航| 久久亚洲欧洲日本韩国欧美| 国产中文字幕精品在线| 精品女同一区二区三区久久| 成人午夜在线免费观看| 国产在线视频不卡福利片| 大秀视频一区二区三区| 黄色三级视频一区二区三区| 成人午夜在线免费观看| 国产三级在线观看视频| 天天操时时操夜夜操| 日本熟女视频中文字幕| 在线免费观看国产黄色av| 亚洲国产综合六月深深爱| 日韩新片一区二区三区| 午夜性色福利在线播放| 亚洲精品一区二区成人影院| 中文字幕日韩在线欧美一区| 日本一本高清免费不卡| 中文字幕日产乱码一二三区| 国产国产成年年人免费看片| 欧美日韩国产激情高清| 婷婷人妻中文字幕在线| 日本人妻在线一区二区三区| 少妇人妻精品一区二区三| 爱高潮www亚洲精品| 一区二区亚洲免费的视频| 青青草视频在线针对华人| 成人精品播放视频在线观看| 黄色片在线观看中文字幕| 国产大学生情侣在线视频| 日本一二三四卡久久精品| 少妇高潮毛片免费看高潮 | 国产在线播放精品视频| 麻豆午夜视频免费在线观看| 热久久视频这里只有精品|