#How to attatch CrossWalk WebView in Cocos2d-x (C++) with Android Studio.

Programming/Old 2016. 3. 5. 14:32

1. Create Project

가장 먼저 할 일은 당연히 프로젝트 생성하는 겁니다.

그러나 Coco Studio로 프로젝트 생성 하지 맙시다. proj.android-studio가 생성되지 않습니다.

cmd에서 cocos new [project name] -p [package] -l cpp -d [directory] 명령어를 이용하여 프로젝트를 생성합니다.


생성된 프로젝트의 디렉토리에 진입하면 

- Classes

- cocos2d

- proj.android

- proj.android-studio

- proj.ios_mac

- proj.linux

기타 등등...

의 디렉토리 구조가 생성되는 것을 확인할 수 있습니다.


android-studio를 열어서 proj.android-studio를 불러옵시다. 

반드시 proj.android-studio여야 합니다.. proj.android 아닙니다.


2. Import CrossWalk 

프로젝트를 오픈하면 아래와 같이 Gradle Scripts에 여러개의 파일이 들어 있습니다.

build.gradle (Module: [project name])를 선택합시다.

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
if (project.hasProperty("RELEASE_STORE_FILE")) {
signingConfig signingConfigs.release
}
}
}

repositories {
maven {
url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':libcocos2dx')
compile 'org.xwalk:xwalk_core_library:10.39.235.15'
}

이렇게 코드를 수정합니다.

그리고 빌드 하면 에러가 납니다. sdk version 관련 된거니 스크롤 좀만 올려서 minSdkVerSion을 바꿔줘요. 

저는 15로 바꿨습니다.

defaultConfig {
applicationId "com.ttmobile.app"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
}


3. APP_ABI := armeabi armeabi-v7a x86

빌드 하면 또 에러납니다.

java.lang.UnsatisfiedLinkError: Couldn't load cocos2dcpp from loader dalvik.system.PathClassLoader

무슨 에러인지는 잘 모르겠지만, 리서치 결과 CPU Architecture와 관련된 에러라고 하네요.


탐색기에서 proj.android-studio-studio -> app -> jni 경로로 이동하여 Application.mk 파일을 엽니다.

android-studio로 끌어다 놓으세요. 그리고 아래처럼 수정해주세요. 즉, 마지막 줄을 추가해주세요.

APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
APP_LDFLAGS := -latomic
APP_ABI := armeabi armeabi-v7a x86

보시다 시피 CPU의 Architecture에 대해 명시해줍니다. 

멍청한 컴파일러는 아키텍처를 구분할 수 없기 때문에, 아마도 기본으로 설정되어 있는 특정 아키텍처에 대해서만 컴파일 해주나 봅니다. 그래서 아키텍처가 다른 단말에는 앱을 런칭시키지 못하나봅니다. 


4. cocos compile -p android --android-studio

이 작업이 끝나면 cmd로 컴파일을 해줘야합니다. 그런데 위에 명시된 아키텍처가 여러 종류여서 컴파일 시간이 전보다 3배 이상 걸립니다. 굳이 명시한 아키텍처 모두 다 컴파일 안 해줘도 되겠지만, 전 그냥 했습니다.

시간이 오래 걸리니 기회입니다. 차나 한잔 하고, 동료들이랑 수다라도 좀 떨고 와야겠네요.

.

..

...

....

.....

......

.......

........

.........

커피 한잔하고 오니 컴파일이 완료 되었네요.

---

BUILD SUCCESSFUL

Total time: 28.595 secs

Stopped 0 compiler daemon(s).

Move apk to ...

Build succeed.

---

실패하셨다면 지못미...

이제 안드로이드 스튜디오에서 실행해주세요. 그러면 이상없이 앱이 단말에 설치되는 것을 확인할 수 있습니다.


5. WebView Test

자 그럼 웹뷰를 붙여볼께요. 레이아웃을 간단하게 만들어주세요.

<main.xml>

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="org.cocos2dx.cpp.AppActivity">

<org.xwalk.core.XWalkView
android:id="@+id/xWalkView"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000"
/>

</RelativeLayout>


AppActivity에 아래와 같이 작성해주세요.

<AppActivity.java>

public class AppActivity extends Cocos2dxActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

XWalkView webView=(XWalkView)findViewById(R.id.xWalkView);
webView.clearCache(true);
webView.load("http://cocos2d-x.org/MoonWarriors/index.html", null);
}
}


매니페스트 권한 설정도 잊지 마시구요.

<AndroidManifest.xml>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

끝이에요. 실행해주세요.

우왕. 실행됐습니다.

53 프레임이나 나오다니...

네이티브 웹뷰는 20프레임도 겨우 나왔는데...

확실히 CrossWalk가 빠르긴 빠릅니다.


고생하셨습니다~!


'Programming > Old' 카테고리의 다른 글

#[c++] ssize_t, size_t  (0) 2016.03.07
#[cocos2d-x] HttpRequest , XML  (0) 2016.03.06
#Cocos2d VS2013 최적화  (0) 2016.03.05
the difference between desing and architecture.  (0) 2016.03.04
#델리게이트와 이벤트  (0) 2015.07.27
admin