2015-11-06 4 views
0

У меня есть приложение для Android, которое использует библиотеки OpenGL и PVRTC Tool. Это приложение отлично работает на Eclipse до API 19. Теперь я хочу переместить это до API 23, поэтому подумайте о переносе приложения в Android Studio, а также в будущую синхронизацию обновлений. Я сталкиваюсь с проблемами в этом портировании, пожалуйста, посмотрите на скриншоты, чтобы увидеть иерархию папок, я имею в Eclipse, работает кодПортирование проекта из Eclipse в Studio

[the project folder hierarchy


[inside the jni folder]

После был мой Android.mk файл:

LOCAL_PATH := $(call my-dir) 
PVRSDKDIR := $(LOCAL_PATH) 
include $(PVRSDKDIR)/Tools/OGLES2/Build/Android/Android.mk 
include $(CLEAR_VARS) 
LOCAL_MODULE := nativeegl 
LOCAL_CFLAGS := -DBUILD_OGLES2 -Wall -g 
LOCAL_SRC_FILES := CCAppMain.cpp 
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2# -lGLESv1_CM 
LOCAL_STATIC_LIBRARIES := \ 
          ogles2tools \ 
          android_native_app_glue 

LOCAL_C_INCLUDES := \ 
        $(PVRSDKDIR)/Builds/OGLES2/Include \ 
        $(PVRSDKDIR)/Tools \ 
        $(PVRSDKDIR)/Tools/OGLES2 
include $(BUILD_SHARED_LIBRARY) 
$(call import-module,android/native_app_glue) 

А это соответствует Application.mk файла в Eclipse,

# The ARMv7 is significanly faster due to the use of the hardware FPU 
#APP_ABI := armeabi armeabi-v7a x86 
#APP_OPTIM := release 
APP_STL := stlport_static 

Я использую Android Studio версии 1.4, Gradle Встроенного 2,5

установил, как путь к классам ««com.android.tools.build:gradle-experimental классов: 0.2.0 "

Мое приложение модуль built.gradle выглядит

apply plugin: 'com.android.model.application' 
model { 
    android { 
     compileSdkVersion = 23 
     buildToolsVersion = "23.0.1" 
     defaultConfig.with { 
      applicationId = "xxx" 
      minSdkVersion.apiLevel = 14 
      targetSdkVersion.apiLevel = 23 
      versionCode = 1 
      versionName = "1.0" 
     } 
    } 
    compileOptions.with { 
     sourceCompatibility=JavaVersion.VERSION_1_7 
     targetCompatibility=JavaVersion.VERSION_1_7 
    } 
    android.ndk { 
     moduleName = "nativeegl" 
     //cppFlags += "-I${file("src/main/jni/native_app_glue")}".toString() 
     cppFlags += "-I${file("src/main/jni")}".toString() 
     cppFlags += "-I${file("src/main/jni/Tools")}".toString() 
     cppFlags += "-I${file("src/main/jni/Tools/OGLES2")}".toString() 
     cppFlags += "-I${file("src/main/jni/Tools/OGLES2/GLES2")}".toString() 
     ldLibs += ["android", "EGL", "GLESv2", "OpenSLES", "log"] 
     stl  = "stlport_static" 
    } 
    android.buildTypes { 
     release { 
      minifyEnabled = false 
      proguardFiles += file('proguard-rules.txt') 
     } 
    } 
} 
dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile 'com.android.support:support-v4:23.0.1' 
} 

Я действительно п Ot возможность настроить приложение на данный момент, по синхронизации он всегда дает такие ошибки, как

Error:Execution failed for task ':app:compileArmeabi-v7aDebugNativeeglSharedLibraryNativeeglMainCpp'. 
> Multiple build operations failed. 
     C++ compiler failed while compiling PVRTPrint3D.cpp. 
     C++ compiler failed while compiling PVRTBackground.cpp. 
     C++ compiler failed while compiling PVRTShader.cpp. 
     C++ compiler failed while compiling PVRTPrint3DAPI.cpp. 
     C++ compiler failed while compiling PVRTPFXParserAPI.cpp. 
    See the complete log at: file:///E:/Android_Studio_Project/XXX/app/build/tmp/compileArmeabi-v7aDebugNativeeglSharedLibraryNativeeglMainCpp/output.txt 

Может кто-нибудь посмотреть в нее и сделать поправку на мой build.gradle файл. Я предполагаю, что инструмент PVRTC в нем игнорируется.

Любая помощь будет оценена по достоинству.

ответ

0

Вы не обязаны оставлять свой тщательно обработанный Android.mk за неполированный и ограниченный DSL экспериментального плагина. См. Больше на define LOCAL_SRC_FILES in ndk{} DSL.

Конкретная проблема в вашем случае, похоже, не в том, что файлы PVRTC игнорируются, но они не скомпилированы в соответствии с правилами и флагами, как указано в Tools/OGLES2/Build/Android/Android.mk.

TL; NR: добавить следующие строки к вам build.gradle:

def ndkBuild = android.ndkDirectory 
import org.apache.tools.ant.taskdefs.condition.Os 
if (Os.isFamily(Os.FAMILY_WINDOWS)) { 
    ndkBuild += '.cmd' 
} 

task buildNative(type: Exec, description: 'Compile JNI source via NDK') { 
    commandLine '$ndkBuild', '-C', 'src/main' 
} 

task cleanNative(type: Exec, description: 'Clean JNI object files') { 
    commandLine '$ndkBuild', 'clean', '-C', 'src/main' 
} 

clean.dependsOn 'cleanNative' 

tasks.all { 
    task -> 
     if (task.name.startsWith('compile') && task.name.contains('MainC')) { 
      task.enabled = false 
     } 
     if (task.name.startsWith('link')) { 
      task.enabled = false 
     } 
     if (task.name.endsWith("SharedLibrary")) { 
      task.dependsOn buildNative 
     } 
} 

android { 
    sourceSets { 
     main { 
      jniLibs.srcDirs = ['src/main/libs'] 
     } 
    } 
} 
+0

так что вы можете сказать мне, пожалуйста, правильно build.gradle NDK {} DSL, я пошел выбросить некоторые ответы здесь , но не смог его решить – Sunny

+0

Это сработало, но это похоже на обходное решение, так как я не могу отладить код NDK, но THANKS – Sunny

+0

@ user2207638: проверьте связанный [ответ] (http://stackoverflow.com/questions/32636150/define-local-src-files-in-ndk-dsl/32640823 # 32640823): Я обновил его несколько раз, пытаясь отслеживать быстрый прогресс с помощью * experimental * плагин. –