-
Faire une base.h de fichiers, ici, nous définissons la méthode concateneMyStringWithCppString qui fonctionne aussi bien sur Android que sur iphone, cette méthode va recevoir une chaîne de caractères à partir d'android ou iphone et de concaténer avec un comum rpc chaîne et de renvoyer ce concatened chaîne.
#ifndef __HelloCpp__Core__
#define __HelloCpp__Core__
#include <iostream>
const char* concateneMyStringWithCppString(const char* myString);
#endif /* defined(__HelloCpp__Core__) */
-
Maintenant, le core.cpp fichier avec la méthode de la mise en œuvre, nous avons une chaîne "CPP_BASE_STRING" et concaténer avec le param "const char* machaine", et de le retourner. Le myString seront livrés par ou via android ou ios.
#include "Core.h"
const char* CPP_BASE_STRING = "cpp says hello world to %s";
const char* concateneMyStringWithCppString(const char* myString) {
char* concatenedString = new char[strlen(CPP_BASE_STRING) + strlen(myString)];
sprintf(concatenedString, CPP_BASE_STRING, myString);
return concatenedString;
}
-
Nous avons donc besoin d'un wrapper pour IOS et d'autres pour android, le premier ira faire de l'IOS wrapper, premier à écrire toi wrapper en-tête, CoreWrapper.h:
#import <Foundation/Foundation.h>
#import "Core.h"
@interface CoreWrapper : NSObject
+ (NSString*) concateneMyStringWithCppString:(NSString*)myString;
@end
-
Maintenant, le code du wrapper, il a besoin d'être Objective-C++ , code CoreWrapper.mm de fichier.
#import "CoreWrapper.h"
@implementation CoreWrapper
+ (NSString*) concateneMyStringWithCppString:(NSString*)myString
{
return [NSString stringWithUTF8String:concateneMyStringWithCppString([myString UTF8String])];
}
@end
-
Et utiliser la base de wrapper sur un mode normal de contrôleur, d'abord le point de Vue du Contrôleur d'en-tête, de sorte ViewController.h
#import <UIKit/UIKit.h>
#import "CoreWrapper.h"
@interface ViewController : UIViewController
@end
-
Et maintenant, le ViewController.mm fichier:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// A normal UITextView
UITextView* txtHelloCpp = [[UITextView alloc] initWithFrame:CGRectMake(0, 140, 320, 20)];
// Here we set the text with shared cpp code.
[txtHelloCpp setText:[CoreWrapper concateneMyStringWithCppString:@"Objective-c"]];
// Normal things again
[self.view addSubview:txtHelloCpp];
[txtHelloCpp release];
}
@end
C'est tout pour IOS, Maintenant android tour. De le faire sur android, vous aurez besoin de l' Android NDK, un Android Wrapper du rpc et de L'application Android et rendre les fichiers, une chose par le temps:
-
premier Android.mk, vous devez le lien partagé rpc code "core.cpp" avec le rpc, android wrapper, donc dans mon exemple, j'ai fait de mon Android.mk fichier comme suivre.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloCpp
LOCAL_SRC_FILES := CoreWrapper.cpp
LOCAL_SRC_FILES += ../../CPP/Core.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)../../CPP/
include $(BUILD_SHARED_LIBRARY)
-
Note à mon dossier de dossier de dans ces exemples est, "je vais ignorer les IOS de la structure parce que xcode organiser automatiquement":
/-
|-Android-
|-jni -
|-Android.mk
|-Application.mk
|-CoreWrapper.cpp
|-other android folders like res and src
|-CPP-----
|-Core.h
|-Core.cpp
-
maintenant, la petite Application.mk:
APP_STL := gnustl_static
APP_ABI := all
-
ici la CoreWrapper.cpp: "l'important, vous avez besoin de savoir l'android jni mise en œuvre"
#include <string.h>
#include <jni.h>
#include "../../CPP/Core.h"
extern "C" {
JNIEXPORT jstring JNICALL Java_la_jurema_doses_hellocpp_MainActivity_concateneMyStringWithCppString(JNIEnv* env, jobject thiz, jstring myString) {
return env->NewStringUTF(concateneMyStringWithCppString(env->GetStringUTFChars(myString, 0)));
}
}
-
Maintenant, la mise en œuvre sur l'île de java, à l'aide d'une Activité normale, le fichier MainActivity.java:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// A normal textview
TextView textView = new TextView(getApplicationContext());
// set the text of textview with the string of shared cpp code
textView.setText(concateneMyStringWithCppString("Javaaaa"));
// normal things
setContentView(textView);
// only interface things nothng important
textView.setTextSize(50);
textView.setTextColor(Color.BLACK);
textView.setGravity(Gravity.CENTER);
}
// very important
private native String concateneMyStringWithCppString(String myString);
static {
System.loadLibrary("HelloCpp");
}
}
Donc, c'est tout, si vous avez fait tout droit, vous obtenez quelque chose comme ça: