1.å¦ä½å¨Androidç³»ç»ä¸è¿è¡Cè¯è¨çç¨åº
2.Android NDK Jni å¼åCåC++çåºå«
3.android 如何启动自己的源码c服务
4.å®åå¼åç¨cè¯è¨å
5.å¦ä½å¨android CC++ nativeç¼ç¨ä¸ä½¿ç¨logCat
å¦ä½å¨Androidç³»ç»ä¸è¿è¡Cè¯è¨çç¨åº
å¨Androidç³»ç»ä¸è¿è¡Cè¯è¨çç¨åºçæ¹æ³ï¼1. æ¥çå¯æ§è¡æ件xlisten-armæéè¦çå¨æé¾æ¥åºï¼
æ§è¡è¯å¥ï¼
2. å°ç¨åºç¼è¯çæ¶åéæ©éæç¼è¯ï¼å³ä½¿ç¨é项 -static
对Makefileæ件ä¸çCFLAGåéè¿è¡ä¿®æ¹ï¼
CFLAGS = -Wall
æ¹ä¸ºï¼
CFLAGS = -Wall -static
3. å¨Makefileä¸ï¼ä¿®æ¹LIBSåéï¼
LIBS = -lsqlite3 -lm -lcrypt
æ¹ä¸ºï¼
LIBS = -lsqlite3 -lm -lcrypt -lpthread -ldl
ç¶åè¿è¡äº¤åç¼è¯ï¼æåäºï¼
4. ç¼è¯åºæ¥çå¯æ§è¡æ件æ¯è¾å¤§ï¼å 为äºéæç¼è¯çï¼æ2Må¤ï¼
æ·è´å°å¼åæ¿çandriodç³»ç»ä¸ï¼
ä¿®æ¹æéï¼
#chmod xlisten-arm
5. æ§è¡ï¼
/ # ./xlisten-arm
è¿æ ·å°±è½å¤æ£ç¡®çæ§è¡äºï¼
Androidç³»ç»ç®ä»ï¼
Androidæ¯ä¸ç§åºäºLinuxçèªç±åå¼æ¾æºä»£ç çæä½ç³»ç»ï¼ä¸»è¦ä½¿ç¨äºç§»å¨è®¾å¤ï¼å¦æºè½ææºåå¹³æ¿çµèï¼ç±Googleå ¬å¸åå¼æ¾ææºèçé¢å¯¼åå¼åãå°æªæç»ä¸ä¸æå称ï¼ä¸å½å¤§éå°åºè¾å¤äººä½¿ç¨âå®åâæâå®è´âãAndroidæä½ç³»ç»æåç±Andy Rubinå¼åï¼ä¸»è¦æ¯æææºã
Android NDK Jni å¼åCåC++çåºå«
Android NDK Jni å¼åCåC++çåºå«
ç±äºAndroidå®æ¹NDKä¾å大å¤ä½¿ç¨Cè¯è¨ç¼åï¼æ以å½æ们æ³ç¨C++è¿è¡å¼åæ¶ï¼ä¼åºç°ç§ç§é误ãä¸é¢ç®å说说å ç¹ä¸åä¹å¤ï¼ä»£ç ä¸ç¨çº¢è²æ åºäºä¸åä¹å¤ï¼
1.å æ¥ä¸ä¸ªç¨Cåçä¾åï¼
ï¼1ï¼hello.cæ件ãå¨Cä¸æ²¡æå¼ç¨ï¼ä¼ éçenvæ¯ä¸ªä¸¤çº§æéï¼ç¨ï¼*envï¼->è°ç¨æ¹æ³ä¸æ¹æ³ä¸è¦ä¼ å ¥env.
1 #include <jni.h>
2
3 jstring Java_com_example_Hello_hello(JNIEnv* env, jobject thiz) {
4 return (*env)->NewStringUTF(env,"Hello Jni---->C!");
5 }
ï¼2ï¼Android.mkæ件,æ´æ¹åç¼å为.c
å¤å¶ä»£ç
1 LOCAL_PATH := $(call my-dir)
2
3 include $(CLEAR_VARS)
4
5 LOCAL_MODULE := hello
6 LOCAL_SRC_FILES := hello.c
7
8 include $(BUILD_SHARED_LIBRARY)
å¤å¶ä»£ç
2.åæ¥ä¸ä¸ªç¨C++åçä¾åï¼
ï¼1ï¼hello.cppæ件ãC++ä¸env为ä¸çº§æéï¼ç¨env->è°ç¨æ¹æ³ï¼æ éä¼ å ¥envï¼C++è¯è¨å¨ç¼è¯çæ¶å为äºè§£å³å½æ°çå¤æé®é¢ï¼ä¼å°å½æ°åååæ°èåèµ·æ¥çæä¸ä¸ªä¸é´çå½æ°å称ï¼èCè¯è¨åä¸ä¼ï¼å æ¤ä¼é æé¾æ¥æ¶æ¾ä¸å°å¯¹åºå½æ°çæ åµï¼æ¤æ¶Cå½æ°å°±éè¦ç¨extern "C"è¿è¡é¾æ¥æå®ï¼è¿åè¯ç¼è¯å¨ï¼è¯·ä¿ææçå称ï¼ä¸è¦ç»æçæç¨äºé¾æ¥çä¸é´å½æ°åï¼exter "C"{ jni代ç }ã
å¤å¶ä»£ç
å¤å¶ä»£ç
1 #include <jni.h>
2
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 jstring Java_com_example_Hello_hello(JNIEnv* env, jobject thiz) {
7 return env->NewStringUTF("Hello Jni---->C++!");
8 }
9 #ifdef __cplusplus
}
#endif
å¤å¶ä»£ç
å¤å¶ä»£ç
ï¼2ï¼Android.mkæ件ï¼æ´æ¹åç¼å为.cpp
å¤å¶ä»£ç
1 LOCAL_PATH := $(call my-dir)
2
3 include $(CLEAR_VARS)
4
5 LOCAL_MODULE := hello
6 LOCAL_SRC_FILES := hello.cpp
7
8 include $(BUILD_SHARED_LIBRARY)
android 如何启动自己的c服务
首先,要在你的源码activity中启动这个服务,代码如下所示。源码
/
** 启动一个延迟线程
*/
Intent serviceIntent=new Intent();
serviceIntent.setClass(Welcome.this,源码obs 源码分析 HoutaiService.class);
startService(serviceIntent);
这个时候你就要去写你的服务了,如下图所示,源码这是源码溯源码环节和写的一个服务。
注意,源码因为后台当中是源码没有界面的,所以不需要继承activity。源码但这个候你就会遇到一个问题就是源码如何与用户互动呢,那么下面就是源码一个方法。
代码如下。源码
NotificationManager nm=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//2.实例化一个通知,源码波胆竞猜源码指定图标、源码概要、源码时间
Notification n=new Notification(R.drawable.ic_launcher,类似梦行源码"智能退出",System.currentTimeMillis());
//3.指定通知的标题、内容和intent
Intent intent = new Intent();
PendingIntent pi= PendingIntent.getActivity(HoutaiService.this, 0, intent, 0);
n.setLatestEventInfo(HoutaiService.this, "你已连续使用网络超3小时", "为防止长时间空闲网络,已退出。如需打开,源码视频网请重新打开应用", pi);
//指定声音
n.defaults = Notification.DEFAULT_SOUND;
//4.发送通知
nm.notify(3, n);
这段代码的意思是通过安卓中的通知来与用户进行交互。能够达到提示用户的目的,怎么样,是不是很简单。
å®åå¼åç¨cè¯è¨å
å®åå¼åç¨cè¯è¨ãæ¯å¦é©±å¨å¼åãå æ ¸å¼åï¼æ¯ä½¿ç¨Cè¯è¨ã
å®åï¼Androidï¼æ¯ä¸ç§åºäºLinuxçèªç±åå¼æ¾æºä»£ç çæä½ç³»ç»ã主è¦ä½¿ç¨äºç§»å¨è®¾å¤ï¼å¦æºè½ææºåå¹³æ¿çµèï¼ç±Googleå ¬å¸åå¼æ¾ææºèçé¢å¯¼åå¼åãAndroidæä½ç³»ç»æåç±AndyRubinå¼åï¼ä¸»è¦æ¯æææºãå¹´8æç±Googleæ¶è´æ³¨èµãå¹´æï¼Googleä¸å®¶ç¡¬ä»¶å¶é åã软件å¼åååçµä¿¡è¥è¿åç»å»ºå¼æ¾ææºèçå ±åç åæ¹è¯Androidç³»ç»ãéåGoogle以Apacheå¼æºè®¸å¯è¯çæææ¹å¼ï¼åå¸äºAndroidçæºä»£ç ã第ä¸é¨Androidæºè½ææºåå¸äºå¹´æãAndroidéæ¸æ©å±å°å¹³æ¿çµèåå ¶ä»é¢åä¸ï¼å¦çµè§ãæ°ç ç¸æºã游ææºãæºè½æ表çã年第ä¸å£åº¦ï¼Androidå¨å ¨ççå¸åºä»½é¢é¦æ¬¡è¶ è¿å¡çç³»ç»ï¼è·å± å ¨ç第ä¸ãå¹´ç第åå£åº¦ï¼Androidå¹³å°ææºçå ¨çå¸åºä»½é¢å·²ç»è¾¾å°.1%ãå¹´ææ¥è°·æå¼åçæä½ç³»ç»Androidå¨è¿æ¥äº5å²çæ¥ï¼å ¨ä¸çéç¨è¿æ¬¾ç³»ç»ç设å¤æ°éå·²ç»è¾¾å°äº¿å°ã
å¦ä½å¨android CC++ nativeç¼ç¨ä¸ä½¿ç¨logCat
ä½å¨Cä¸è°è¯å°é¾ï¼å æ¤è½ä½¿ç¨logcatæä¸ºå¿ é¡»çè¦æ±ã
å ³äºå¨Native代ç ä¸ä½¿ç¨logcatï¼ç½ä¸æå¾å¤è¯´æ³ï¼å¤§é¨åæææ¬ ç¼ºï¼æçæ ¹æ¬æ¯éçã
è¦ä½¿ç¨logcat,é¦å å¨ä»£ç ä¸è¦å¼å ¥ logç头æ件ã
#include <android/log.h
ç¶åä½ å¯ä»¥ç®åçéè¿
__android_log_write(ANDROID_LOG_ERROR,"Tag","Message"); æ¹æ³ålogcatè¾åºã
log 级å«æå¾å¤ ï¼
ANDROID_LOG_UNKNOWN,
ANDROID_LOG_DEFAULT,
ANDROID_LOG_VERBOSE,
ANDROID_LOG_DEBUG,
ANDROID_LOG_INFO,
ANDROID_LOG_WARN,
ANDROID_LOG_ERROR,
ANDROID_LOG_FATAL,
ANDROID_LOG_SILENT,
è¿æ ·åå®ä»¥åï¼å¦æç´æ¥ç¼è¯ï¼å°±ä¼æ¥ __android_log_write æ¹æ³undefined.
å¨Android.mkæ件éï¼å¯ä»¥æå®ä¸ä¸ªLOCAL_LDLIBSçåæ°ãå¦æä¸æå®ï¼é£ä¹ç¼è¯çæ¶åï¼åªä¼å¼å ¥é»è®¤çå 个éè¦çlibï¼æ¯å¦libcä¹ç±»çã
å¦æè¦ç¨logï¼é£å°±è¦æ liblogç»å¼è¿æ¥ã
å æ¤éè¦æ¹æ LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog æå¯ä»¥æ£å¸¸ç¼è¯ã
å ¶ä¸-Låæ°æ¯æå®äºæç´¢libçè·¯å¾ã