首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Android构建Mailcore2

为Android构建Mailcore2
EN

Stack Overflow用户
提问于 2018-04-10 14:49:18
回答 1查看 289关注 0票数 4

我遵循官方建筑指示来重新编译库。就我而言:

代码语言:javascript
复制
> export ANDROID_SDK=$HOME/Library/Android/sdk
> export ANDROID_NDK=$ANDROID_SDK/ndk-bundle
> ./build.sh

并在编译过程中得到一些错误,如:

代码语言:javascript
复制
[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...

诸若此类。最后我得到:

代码语言:javascript
复制
[arm64-v8a] StaticLibrary  : libstdc++.a
[arm64-v8a] SharedLibrary  : libMailCore.so
[arm64-v8a] Install        : libMailCore.so => libs/arm64-v8a/libMailCore.so
warning: [options] bootstrap class path not set in conjunction with -source 1.6
com/libmailcore/MainThreadUtils.java:3: error: package android.os does not exist
import android.os.Handler;
                 ^
com/libmailcore/MainThreadUtils.java:4: error: package android.os does not exist
import android.os.Looper;
                 ^
com/libmailcore/MainThreadUtils.java:5: error: package android.util does not exist
import android.util.Log;
                   ^
com/libmailcore/MainThreadUtils.java:10: error: cannot find symbol
    private Handler handler;
            ^
  symbol:   class Handler
  location: class MainThreadUtils
com/libmailcore/MainThreadUtils.java:21: error: cannot find symbol
        handler = new Handler(Looper.getMainLooper());
                      ^
  symbol:   class Handler
  location: class MainThreadUtils
com/libmailcore/MainThreadUtils.java:21: error: cannot find symbol
        handler = new Handler(Looper.getMainLooper());
                              ^
  symbol:   variable Looper
  location: class MainThreadUtils
6 errors
1 warning

如何重新编译库?最后,我想要修复一个文本重定位错误,但是它甚至没有做一个干净的构建

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-13 19:01:22

它正在寻找Android平台16和21,却找不到它们,这就是它显示错误信息的原因:

代码语言:javascript
复制
error: package android.os does not exist

它们通常安装在文件夹$ANDROID_SDK/platforms中。

(将其添加到build-android/build.sh顶部附近,查看它正在做什么:

代码语言:javascript
复制
set -v
set -x

这将显示它正在运行的命令和shell变量的内容。)

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

代码语言:javascript
复制
# Start building.
ANDROID_PLATFORM=android-16
archs="armeabi armeabi-v7a x86"

用您安装的任何版本替换android-16,或者更好的是安装android-16,因为它期望这样做。另外,armeabi平台支持已经从最新的Android中删除,这给我带来了一些错误。因此,删除armeabi,只留下armeabi-v7ax86

此外,还有以下几个方面:

代码语言:javascript
复制
ANDROID_PLATFORM=android-21
archs="arm64-v8a"

以及:

代码语言:javascript
复制
ANDROID_PLATFORM=android-16
cd "$current_dir/../src/java"
...

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

我也收到了错误:

代码语言:javascript
复制
Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16. 

找到这一行:

代码语言:javascript
复制
$ANDROID_NDK/ndk-build TARGET_PLATFORM=$ANDROID_PLATFORM TARGET_ARCH_ABI=$TARGET_ARCH_ABI \

并将APP_PLATFORM添加到其中,就像这样,修正了这个错误:

代码语言:javascript
复制
$ANDROID_NDK/ndk-build TARGET_PLATFORM=$ANDROID_PLATFORM APP_PLATFORM=$ANDROID_PLATFORM TARGET_ARCH_ABI=$TARGET_ARCH_ABI \

我也收到了错误:

代码语言:javascript
复制
*** 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.

显然,GCC不再得到支持。我安装了clang,然后它继续编译该项目,但由于另一个错误而停止。

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

代码语言:javascript
复制
NDK_TOOLCHAIN_VERSION=4.9 \

正如所描述的这里

我收到了错误:

代码语言:javascript
复制
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_info__。当您第一次使用Clang和libstdc++做一个典型的Hello时,您通常会遇到这个问题。-2月26日至13日20时42分

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49756687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档