为Android构建Mailcore2

为Android构建Mailcore2,android,android-ndk,mailcore2,Android,Android Ndk,Mailcore2,我按照以下步骤重新编译库。就我而言: > export ANDROID_SDK=$HOME/Library/Android/sdk > export ANDROID_NDK=$ANDROID_SDK/ndk-bundle > ./build.sh 并在编译过程中得到一些错误,如: [arm64-v8a] Compile++ : MailCore <= MCIMAPAsyncSession.cpp In file included from /Users/nik

我按照以下步骤重新编译库。就我而言:

> export ANDROID_SDK=$HOME/Library/Android/sdk
> export ANDROID_NDK=$ANDROID_SDK/ndk-bundle
> ./build.sh
并在编译过程中得到一些错误,如:

[arm64-v8a] Compile++      : MailCore <= MCIMAPAsyncSession.cpp
In file included from /Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../include/MailCore/MCObject.h:11:0,
                 from /Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../include/MailCore/MCAutoreleasePool.h:5,
                 from /Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../include/MailCore/MCBaseTypes.h:5,
                 from /Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../../src/async/imap/MCIMAPAsyncSession.h:13,
                 from /Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../../src/async/imap/MCIMAPAsyncSession.cpp:9:
/Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../../src/async/imap/MCIMAPAsyncSession.cpp: In member function 'virtual void mailcore::IMAPAsyncSession::automaticConfigurationDone(mailcore::IMAPSession*)':
/Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../../src/async/imap/MCIMAPAsyncSession.cpp:874:87: warning: 'virtual mailcore::String* mailcore::IMAPSession::gmailUserDisplayName()' is deprecated (declared at /Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../../src/core/imap/MCIMAPSession.h:196) [-Wdeprecated-declarations]
     MC_SAFE_REPLACE_COPY(String, mGmailUserDisplayName, session->gmailUserDisplayName());
                                                                                       ^
/Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../include/MailCore/MCUtils.h:8:27: note: in definition of macro 'MC_SAFE_COPY'
 #define MC_SAFE_COPY(o) ((o) != NULL ? (o)->copy() : NULL)
                           ^
/Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../../src/async/imap/MCIMAPAsyncSession.cpp:874:5: note: in expansion of macro 'MC_SAFE_REPLACE_COPY'
     MC_SAFE_REPLACE_COPY(String, mGmailUserDisplayName, session->gmailUserDisplayName());
     ^
/Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../../src/async/imap/MCIMAPAsyncSession.cpp:874:87: warning: 'virtual mailcore::String* mailcore::IMAPSession::gmailUserDisplayName()' is deprecated (declared at /Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../../src/core/imap/MCIMAPSession.h:196) [-Wdeprecated-declarations]
     MC_SAFE_REPLACE_COPY(String, mGmailUserDisplayName, session->gmailUserDisplayName());
                                                                                       ^
/Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../include/MailCore/MCUtils.h:8:41: note: in definition of macro 'MC_SAFE_COPY'
 #define MC_SAFE_COPY(o) ((o) != NULL ? (o)->copy() : NULL)
                                         ^
/Users/nikolay/Documents/Mailcore/mailcore2/build-android/jni/../../src/async/imap/MCIMAPAsyncSession.cpp:874:5: note: in expansion of macro 'MC_SAFE_REPLACE_COPY'
     MC_SAFE_REPLACE_COPY(String, mGmailUserDisplayName, session->gmailUserDisplayName());
     ^

... compiling goes ok...
... and again some errors...

如何重新编译库?最后,我想修复一个问题,但它甚至没有一个干净的构建

它正在寻找Android平台16和21,但找不到它们,这就是为什么它会显示错误消息:

error: package android.os does not exist
它们通常安装在文件夹
$ANDROID\u SDK/platforms

(在
buildandroid/build.sh
顶部附近添加此项,以查看其功能:

set -v
set -x
这将显示它正在运行的命令以及shell变量的内容。)

如果打开Mailcore2中的文件
buildandroid/build.sh
,您将看到如下行:

# Start building.
ANDROID_PLATFORM=android-16
archs="armeabi armeabi-v7a x86"
android-16
替换为您已安装的任何版本,或者更好,安装
android-16
,因为它期待这样。 另外,
armeabi
平台支持已经从最新的Android NDK中删除,它给了我关于它的错误信息。因此,删除
armeabi
,只保留
armeabi-v7a
x86

下面还有:

ANDROID_PLATFORM=android-21
archs="arm64-v8a"
以及:

因此安装
android-16
android-21
最容易解决此问题。

我也得到了错误:

Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16. 
*** Android NDK: Invalid NDK_TOOLCHAIN_VERSION value: 4.9. GCC is no longer supported. See https://android.googlesource.com/platform/ndk/+/master/docs/ClangMigration.md.    .  Stop.
MailCore2/build-android/jni/../../src/java/TypesUtils.cpp:84:32: error: member access into incomplete type 'const std::type_info'
MCLog("info name: %s", info->name());
                           ^
找到这条线:

$ANDROID_NDK/ndk-build TARGET_PLATFORM=$ANDROID_PLATFORM TARGET_ARCH_ABI=$TARGET_ARCH_ABI \
然后向其中添加
APP_PLATFORM
,就像这样,修复了该错误:

$ANDROID_NDK/ndk-build TARGET_PLATFORM=$ANDROID_PLATFORM APP_PLATFORM=$ANDROID_PLATFORM TARGET_ARCH_ABI=$TARGET_ARCH_ABI \

我也得到了错误:

Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16. 
*** Android NDK: Invalid NDK_TOOLCHAIN_VERSION value: 4.9. GCC is no longer supported. See https://android.googlesource.com/platform/ndk/+/master/docs/ClangMigration.md.    .  Stop.
MailCore2/build-android/jni/../../src/java/TypesUtils.cpp:84:32: error: member access into incomplete type 'const std::type_info'
MCLog("info name: %s", info->name());
                           ^
显然,GCC不再受支持。我安装了clang,之后它继续编译项目,但由于另一个错误而停止

此外,我必须删除包含以下内容的行:

NDK_TOOLCHAIN_VERSION=4.9 \
如上所述

我收到了错误消息:

Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16. 
*** Android NDK: Invalid NDK_TOOLCHAIN_VERSION value: 4.9. GCC is no longer supported. See https://android.googlesource.com/platform/ndk/+/master/docs/ClangMigration.md.    .  Stop.
MailCore2/build-android/jni/../../src/java/TypesUtils.cpp:84:32: error: member access into incomplete type 'const std::type_info'
MCLog("info name: %s", info->name());
                           ^
这显然与:

GCC似乎只是隐式地声明了
std::type\u info
。在使用Clang和libstdc++进行典型的Hello World时,您通常第一次遇到这个问题Xeo 2013年2月26日20:42


我还没能解决这个问题,但我会在有机会的时候更新这篇文章。

很好的研究!:)@NikolayKulachenko谢谢,我会在有空的时候尝试完成它。在哪里添加此项:>导出ANDROID\u SDK=$HOME/Library/ANDROID/SDK>导出ANDROID\u NDK=$ANDROID\u SDK/NDK bundle>/build.sh我无法进行此设置。请帮帮我