#How to attatch CrossWalk WebView in Cocos2d-x (C++) with Android Studio.
Programming/Old 2016. 3. 5. 14:321. 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 |