mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-09-12 20:51:41 +02:00
Merge #17227: Qt: Add Android packaging support
246774e264
depends: fix Qt precompiled headers bug (Igor Cota)8e7ad4146d
depends: disable Qt Vulkan support on Android (Igor Cota)ba46adaa1a
CI: add Android APK build to cirrus (Igor Cota)7563720e30
CI: add Android APK build script (Igor Cota)ebfb10cb75
Qt: add Android packaging support (Igor Cota) Pull request description:  This PR is the third and final piece of the basic Android support puzzle - it depends on https://github.com/bitcoin/bitcoin/pull/16110 and is related to https://github.com/bitcoin/bitcoin/pull/16883. It introduces an `android` directory under `qt` and a simple way to build an Android package of `bitcoin-qt`: 1. Build depends for Android as described in the [README](https://github.com/bitcoin/bitcoin/blob/master/depends/README.md) 2. Configure with one of the resulting prefixes 3. Run `make && make apk` in `src/qt` The resulting APK files will be in `android/build/outputs/apk`. You can install them manually or with [adb](https://developer.android.com/studio/command-line/adb). One can also open the `android` directory in Android Studio for that integrated development and debugging experience. `BitcoinQtActivity` is your starting point. Under the hood makefile `apk` target: 1. Renames the `bitcoin-qt` binary to `libbitcoin-qt.so` and copies it over to a folder under `android/libs` depending on which prefix and corresponding [ABI](https://developer.android.com/ndk/guides/abis.html#sa) `bitcoin-qt` was built for 2. Takes `libc++_shared.so` from the Android NDK and puts in the same place. It [must be included](https://developer.android.com/ndk/guides/cpp-support) in the APK 3. Extracts Qt for Android Java support files from the `qtbase` archive in `depends/sources` to `android/src` There is also just a tiny bit of `ifdef`'d code to make the Qt Widgets menus usable. It's not pretty but it works and is a stepping stone towards https://github.com/bitcoin/bitcoin/pull/16883. ACKs for top commit: MarcoFalke: cr ACK246774e264
laanwj: Code review ACK246774e264
Tree-SHA512: ba30a746576a167545223c35a51ae60bb0838818779fc152c210f5af1413961b2a6ab6af520ff92cbc8dcd5dcb663e81ca960f021218430c1f76397ed4cead6c
This commit is contained in:
@@ -180,3 +180,11 @@ task:
|
|||||||
CI_USE_APT_INSTALL: "no"
|
CI_USE_APT_INSTALL: "no"
|
||||||
PACKAGE_MANAGER_INSTALL: "echo" # Nothing to do
|
PACKAGE_MANAGER_INSTALL: "echo" # Nothing to do
|
||||||
FILE_ENV: "./ci/test/00_setup_env_mac_host.sh"
|
FILE_ENV: "./ci/test/00_setup_env_mac_host.sh"
|
||||||
|
|
||||||
|
task:
|
||||||
|
name: 'ARM64 Android APK [bionic]'
|
||||||
|
<< : *GLOBAL_TASK_TEMPLATE
|
||||||
|
container:
|
||||||
|
image: ubuntu:bionic
|
||||||
|
env:
|
||||||
|
FILE_ENV: "./ci/test/00_setup_env_android.sh"
|
||||||
|
17
ci/test/00_setup_env_android.sh
Normal file
17
ci/test/00_setup_env_android.sh
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2019-2020 The Bitcoin Core developers
|
||||||
|
# Distributed under the MIT software license, see the accompanying
|
||||||
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
export LC_ALL=C.UTF-8
|
||||||
|
|
||||||
|
export CONTAINER_NAME=ci_android
|
||||||
|
export PACKAGES="clang llvm unzip openjdk-8-jdk gradle"
|
||||||
|
|
||||||
|
export ANDROID_API_LEVEL=28
|
||||||
|
export ANDROID_BUILD_TOOLS_VERSION=28.0.3
|
||||||
|
export ANDROID_NDK_VERSION=21.1.6352462
|
||||||
|
export ANDROID_TOOLS_URL=https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip
|
||||||
|
|
||||||
|
export BITCOIN_CONFIG="--disable-ccache"
|
@@ -22,6 +22,20 @@ if [ -n "$XCODE_VERSION" ] && [ ! -f "$OSX_SDK_PATH" ]; then
|
|||||||
DOCKER_EXEC curl --location --fail "${SDK_URL}/${OSX_SDK_BASENAME}" -o "$OSX_SDK_PATH"
|
DOCKER_EXEC curl --location --fail "${SDK_URL}/${OSX_SDK_BASENAME}" -o "$OSX_SDK_PATH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -n "$ANDROID_TOOLS_URL" ]; then
|
||||||
|
ANDROID_TOOLS_PATH=$DEPENDS_DIR/sdk-sources/android-tools.zip
|
||||||
|
ANDROID_HOME="$DEPENDS_DIR"/SDKs/android
|
||||||
|
ANDROID_NDK_HOME=${ANDROID_HOME}/ndk/${ANDROID_NDK_VERSION}
|
||||||
|
|
||||||
|
DOCKER_EXEC curl --location --fail "${ANDROID_TOOLS_URL}" -o "$ANDROID_TOOLS_PATH"
|
||||||
|
DOCKER_EXEC mkdir -p "${ANDROID_HOME}/cmdline-tools"
|
||||||
|
DOCKER_EXEC unzip -o "$ANDROID_TOOLS_PATH" -d "${ANDROID_HOME}/cmdline-tools"
|
||||||
|
DOCKER_EXEC "yes | ${ANDROID_HOME}/cmdline-tools/tools/bin/sdkmanager --install \"build-tools;${ANDROID_BUILD_TOOLS_VERSION}\" \"platform-tools\" \"platforms;android-${ANDROID_API_LEVEL}\" \"ndk;${ANDROID_NDK_VERSION}\""
|
||||||
|
|
||||||
|
MAKE_COMMAND="ANDROID_SDK=${ANDROID_HOME} ANDROID_NDK=${ANDROID_NDK_HOME} make $MAKEJOBS -C depends HOST=aarch64-linux-android ANDROID_API_LEVEL=${ANDROID_API_LEVEL} ANDROID_TOOLCHAIN_BIN=${ANDROID_HOME}/ndk/${ANDROID_NDK_VERSION}/toolchains/llvm/prebuilt/linux-x86_64/bin/ $DEP_OPTS"
|
||||||
|
DOCKER_EXEC "$MAKE_COMMAND" HOST=aarch64-linux-android
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ ${USE_MEMORY_SANITIZER} == "true" ]]; then
|
if [[ ${USE_MEMORY_SANITIZER} == "true" ]]; then
|
||||||
# Use BDB compiled using install_db4.sh script to work around linking issue when using BDB
|
# Use BDB compiled using install_db4.sh script to work around linking issue when using BDB
|
||||||
# from depends. See https://github.com/bitcoin/bitcoin/pull/18288#discussion_r433189350 for
|
# from depends. See https://github.com/bitcoin/bitcoin/pull/18288#discussion_r433189350 for
|
||||||
|
@@ -6,6 +6,14 @@
|
|||||||
|
|
||||||
export LC_ALL=C.UTF-8
|
export LC_ALL=C.UTF-8
|
||||||
|
|
||||||
|
if [ -n "$ANDROID_TOOLS_URL" ]; then
|
||||||
|
DOCKER_EXEC make distclean || true
|
||||||
|
DOCKER_EXEC ./autogen.sh
|
||||||
|
DOCKER_EXEC ./configure $BITCOIN_CONFIG --prefix=$DEPENDS_DIR/aarch64-linux-android || ( (DOCKER_EXEC cat config.log) && false)
|
||||||
|
DOCKER_EXEC "cd src/qt && make $MAKEJOBS && ANDROID_HOME=${ANDROID_HOME} ANDROID_NDK_HOME=${ANDROID_NDK_HOME} make apk"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
BITCOIN_CONFIG_ALL="--enable-suppress-external-warnings --disable-dependency-tracking --prefix=$DEPENDS_DIR/$HOST --bindir=$BASE_OUTDIR/bin --libdir=$BASE_OUTDIR/lib"
|
BITCOIN_CONFIG_ALL="--enable-suppress-external-warnings --disable-dependency-tracking --prefix=$DEPENDS_DIR/$HOST --bindir=$BASE_OUTDIR/bin --libdir=$BASE_OUTDIR/lib"
|
||||||
if [ -z "$NO_WERROR" ]; then
|
if [ -z "$NO_WERROR" ]; then
|
||||||
BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} --enable-werror"
|
BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} --enable-werror"
|
||||||
|
16
configure.ac
16
configure.ac
@@ -734,6 +734,21 @@ case $host in
|
|||||||
*android*)
|
*android*)
|
||||||
dnl make sure android stays above linux for hosts like *linux-android*
|
dnl make sure android stays above linux for hosts like *linux-android*
|
||||||
TARGET_OS=android
|
TARGET_OS=android
|
||||||
|
case $host in
|
||||||
|
*x86_64*)
|
||||||
|
ANDROID_ARCH=x86_64
|
||||||
|
;;
|
||||||
|
*aarch64*)
|
||||||
|
ANDROID_ARCH=arm64-v8a
|
||||||
|
;;
|
||||||
|
*armv7a*)
|
||||||
|
ANDROID_ARCH=armeabi-v7a
|
||||||
|
;;
|
||||||
|
*i686*)
|
||||||
|
ANDROID_ARCH=i686
|
||||||
|
;;
|
||||||
|
*) AC_MSG_ERROR("Could not determine Android arch") ;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
*linux*)
|
*linux*)
|
||||||
TARGET_OS=linux
|
TARGET_OS=linux
|
||||||
@@ -1849,6 +1864,7 @@ AC_SUBST(HAVE_BUILTIN_PREFETCH)
|
|||||||
AC_SUBST(HAVE_MM_PREFETCH)
|
AC_SUBST(HAVE_MM_PREFETCH)
|
||||||
AC_SUBST(HAVE_STRONG_GETAUXVAL)
|
AC_SUBST(HAVE_STRONG_GETAUXVAL)
|
||||||
AC_SUBST(HAVE_WEAK_GETAUXVAL)
|
AC_SUBST(HAVE_WEAK_GETAUXVAL)
|
||||||
|
AC_SUBST(ANDROID_ARCH)
|
||||||
AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
|
AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini])
|
||||||
AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
|
AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh])
|
||||||
AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([doc/Doxyfile])])
|
AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([doc/Doxyfile])])
|
||||||
|
@@ -9,7 +9,7 @@ $(package)_qt_libs=corelib network widgets gui plugins testlib
|
|||||||
$(package)_patches=fix_qt_pkgconfig.patch mac-qmake.conf fix_no_printer.patch no-xlib.patch
|
$(package)_patches=fix_qt_pkgconfig.patch mac-qmake.conf fix_no_printer.patch no-xlib.patch
|
||||||
$(package)_patches+= fix_android_qmake_conf.patch fix_android_jni_static.patch dont_hardcode_pwd.patch
|
$(package)_patches+= fix_android_qmake_conf.patch fix_android_jni_static.patch dont_hardcode_pwd.patch
|
||||||
$(package)_patches+= drop_lrelease_dependency.patch no_sdk_version_check.patch
|
$(package)_patches+= drop_lrelease_dependency.patch no_sdk_version_check.patch
|
||||||
$(package)_patches+= fix_qpainter_non_determinism.patch fix_lib_paths.patch
|
$(package)_patches+= fix_qpainter_non_determinism.patch fix_lib_paths.patch fix_android_pch.patch
|
||||||
|
|
||||||
$(package)_qttranslations_file_name=qttranslations-$($(package)_suffix)
|
$(package)_qttranslations_file_name=qttranslations-$($(package)_suffix)
|
||||||
$(package)_qttranslations_sha256_hash=e1de58ed108b7e0a138815ea60fd46a2c4e1fc31396a707e5630e92de79c53de
|
$(package)_qttranslations_sha256_hash=e1de58ed108b7e0a138815ea60fd46a2c4e1fc31396a707e5630e92de79c53de
|
||||||
@@ -165,6 +165,7 @@ $(package)_config_opts_android += -no-fontconfig
|
|||||||
$(package)_config_opts_android += -L $(host_prefix)/lib
|
$(package)_config_opts_android += -L $(host_prefix)/lib
|
||||||
$(package)_config_opts_android += -I $(host_prefix)/include
|
$(package)_config_opts_android += -I $(host_prefix)/include
|
||||||
$(package)_config_opts_android += -pch
|
$(package)_config_opts_android += -pch
|
||||||
|
$(package)_config_opts_android += -no-feature-vulkan
|
||||||
|
|
||||||
$(package)_config_opts_aarch64_android += -android-arch arm64-v8a
|
$(package)_config_opts_aarch64_android += -android-arch arm64-v8a
|
||||||
$(package)_config_opts_armv7a_android += -android-arch armeabi-v7a
|
$(package)_config_opts_armv7a_android += -android-arch armeabi-v7a
|
||||||
@@ -224,6 +225,7 @@ define $(package)_preprocess_cmds
|
|||||||
patch -p1 -i $($(package)_patch_dir)/fix_no_printer.patch && \
|
patch -p1 -i $($(package)_patch_dir)/fix_no_printer.patch && \
|
||||||
patch -p1 -i $($(package)_patch_dir)/fix_android_qmake_conf.patch && \
|
patch -p1 -i $($(package)_patch_dir)/fix_android_qmake_conf.patch && \
|
||||||
patch -p1 -i $($(package)_patch_dir)/fix_android_jni_static.patch && \
|
patch -p1 -i $($(package)_patch_dir)/fix_android_jni_static.patch && \
|
||||||
|
patch -p1 -i $($(package)_patch_dir)/fix_android_pch.patch && \
|
||||||
patch -p1 -i $($(package)_patch_dir)/no-xlib.patch && \
|
patch -p1 -i $($(package)_patch_dir)/no-xlib.patch && \
|
||||||
patch -p1 -i $($(package)_patch_dir)/fix_qpainter_non_determinism.patch &&\
|
patch -p1 -i $($(package)_patch_dir)/fix_qpainter_non_determinism.patch &&\
|
||||||
patch -p1 -i $($(package)_patch_dir)/no_sdk_version_check.patch && \
|
patch -p1 -i $($(package)_patch_dir)/no_sdk_version_check.patch && \
|
||||||
|
10
depends/patches/qt/fix_android_pch.patch
Normal file
10
depends/patches/qt/fix_android_pch.patch
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
--- old/qtbase/mkspecs/common/android-base-head.conf
|
||||||
|
+++ new/qtbase/mkspecs/common/android-base-head.conf
|
||||||
|
@@ -73,6 +73,6 @@ CROSS_COMPILE = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-
|
||||||
|
QMAKE_PCH_OUTPUT_EXT = .gch
|
||||||
|
|
||||||
|
QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
|
||||||
|
-QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE}
|
||||||
|
+QMAKE_CFLAGS_USE_PRECOMPILE = -include-pch ${QMAKE_PCH_OUTPUT}
|
||||||
|
QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
|
||||||
|
QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
|
@@ -44,6 +44,7 @@ The following are developer notes on how to build Bitcoin Core on your native pl
|
|||||||
- [FreeBSD Build Notes](build-freebsd.md)
|
- [FreeBSD Build Notes](build-freebsd.md)
|
||||||
- [OpenBSD Build Notes](build-openbsd.md)
|
- [OpenBSD Build Notes](build-openbsd.md)
|
||||||
- [NetBSD Build Notes](build-netbsd.md)
|
- [NetBSD Build Notes](build-netbsd.md)
|
||||||
|
- [Android Build Notes](build-android.md)
|
||||||
- [Gitian Building Guide (External Link)](https://github.com/bitcoin-core/docs/blob/master/gitian-building.md)
|
- [Gitian Building Guide (External Link)](https://github.com/bitcoin-core/docs/blob/master/gitian-building.md)
|
||||||
|
|
||||||
Development
|
Development
|
||||||
|
12
doc/build-android.md
Normal file
12
doc/build-android.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
ANDROID BUILD NOTES
|
||||||
|
======================
|
||||||
|
|
||||||
|
This guide describes how to build and package the `bitcoin-qt` GUI for Android on Linux and macOS.
|
||||||
|
|
||||||
|
## Preparation
|
||||||
|
|
||||||
|
You will need to get the Android NDK and build dependencies for Android as described in [depends/README.md](../depends/README.md).
|
||||||
|
|
||||||
|
## Building and packaging
|
||||||
|
|
||||||
|
After the depends are built configure with one of the resulting prefixes and run `make && make apk` in `src/qt`.
|
@@ -378,6 +378,20 @@ bitcoin_qt_clean: FORCE
|
|||||||
|
|
||||||
bitcoin_qt : qt/bitcoin-qt$(EXEEXT)
|
bitcoin_qt : qt/bitcoin-qt$(EXEEXT)
|
||||||
|
|
||||||
|
APK_LIB_DIR = qt/android/libs/$(ANDROID_ARCH)
|
||||||
|
QT_BASE_PATH = $(shell find ../depends/sources/ -maxdepth 1 -type f -regex ".*qtbase.*\.tar.xz")
|
||||||
|
QT_BASE_TLD = $(shell tar tf $(QT_BASE_PATH) --exclude='*/*')
|
||||||
|
|
||||||
|
bitcoin_qt_apk: FORCE
|
||||||
|
mkdir -p $(APK_LIB_DIR)
|
||||||
|
cp $(dir $(CC))../sysroot/usr/lib/$(host_alias)/libc++_shared.so $(APK_LIB_DIR)
|
||||||
|
tar xf $(QT_BASE_PATH) -C qt/android/src/ $(QT_BASE_TLD)src/android/jar/src --strip-components=5
|
||||||
|
tar xf $(QT_BASE_PATH) -C qt/android/src/ $(QT_BASE_TLD)src/android/java/src --strip-components=5
|
||||||
|
tar xf $(QT_BASE_PATH) -C qt/android/res/ $(QT_BASE_TLD)src/android/java/res --strip-components=5
|
||||||
|
cp qt/bitcoin-qt $(APK_LIB_DIR)/libbitcoin-qt.so
|
||||||
|
cd qt/android && gradle wrapper --gradle-version=6.6.1
|
||||||
|
cd qt/android && ./gradlew build
|
||||||
|
|
||||||
ui_%.h: %.ui
|
ui_%.h: %.ui
|
||||||
@test -f $(UIC)
|
@test -f $(UIC)
|
||||||
@$(MKDIR_P) $(@D)
|
@$(MKDIR_P) $(@D)
|
||||||
|
@@ -7,3 +7,5 @@ check: FORCE
|
|||||||
$(MAKE) -C .. test_bitcoin_qt_check
|
$(MAKE) -C .. test_bitcoin_qt_check
|
||||||
bitcoin-qt bitcoin-qt.exe: FORCE
|
bitcoin-qt bitcoin-qt.exe: FORCE
|
||||||
$(MAKE) -C .. bitcoin_qt
|
$(MAKE) -C .. bitcoin_qt
|
||||||
|
apk: FORCE
|
||||||
|
$(MAKE) -C .. bitcoin_qt_apk
|
||||||
|
38
src/qt/android/AndroidManifest.xml
Normal file
38
src/qt/android/AndroidManifest.xml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<manifest package="org.bitcoincore.qt" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
|
||||||
|
<uses-sdk android:targetSdkVersion="24"/>
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
|
||||||
|
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
|
||||||
|
|
||||||
|
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
|
||||||
|
|
||||||
|
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="Bitcoin Core">
|
||||||
|
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density"
|
||||||
|
android:name="org.bitcoincore.qt.BitcoinQtActivity"
|
||||||
|
android:label="Bitcoin Core"
|
||||||
|
android:icon="@drawable/bitcoin"
|
||||||
|
android:screenOrientation="unspecified"
|
||||||
|
android:launchMode="singleTop">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
</intent-filter>
|
||||||
|
|
||||||
|
<meta-data android:name="android.app.arguments" android:value="-testnet"/>
|
||||||
|
<meta-data android:name="android.app.lib_name" android:value="bitcoin-qt"/>
|
||||||
|
<meta-data android:name="android.app.repository" android:value="default"/>
|
||||||
|
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="1"/>
|
||||||
|
<meta-data android:name="android.app.use_local_qt_libs" android:value="1"/>
|
||||||
|
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
|
||||||
|
<meta-data android:name="android.app.system_libs_prefix" android:value="/system/lib/"/>
|
||||||
|
<meta-data android:name="android.app.background_running" android:value="true"/>
|
||||||
|
<meta-data android:name="android.app.auto_screen_scale_factor" android:value="true"/>
|
||||||
|
<meta-data android:name="android.app.extract_android_style" android:value="default"/>
|
||||||
|
</activity>
|
||||||
|
|
||||||
|
</application>
|
||||||
|
</manifest>
|
52
src/qt/android/build.gradle
Normal file
52
src/qt/android/build.gradle
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
classpath 'com.android.tools.build:gradle:3.1.0'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdkVersion androidCompileSdkVersion.toInteger()
|
||||||
|
|
||||||
|
buildToolsVersion androidBuildToolsVersion
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
main {
|
||||||
|
manifest.srcFile 'AndroidManifest.xml'
|
||||||
|
java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java']
|
||||||
|
aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl']
|
||||||
|
res.srcDirs = [qt5AndroidDir + '/res', 'res']
|
||||||
|
resources.srcDirs = ['src']
|
||||||
|
renderscript.srcDirs = ['src']
|
||||||
|
assets.srcDirs = ['assets']
|
||||||
|
jniLibs.srcDirs = ['libs']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lintOptions {
|
||||||
|
abortOnError false
|
||||||
|
}
|
||||||
|
|
||||||
|
dexOptions {
|
||||||
|
javaMaxHeapSize '4g'
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 24
|
||||||
|
}
|
||||||
|
}
|
4
src/qt/android/gradle.properties
Normal file
4
src/qt/android/gradle.properties
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
androidBuildToolsVersion=28.0.3
|
||||||
|
androidCompileSdkVersion=28
|
||||||
|
qt5AndroidDir=new File(".").absolutePath
|
||||||
|
org.gradle.jvmargs=-Xmx4608M
|
BIN
src/qt/android/res/drawable-hdpi/bitcoin.png
Normal file
BIN
src/qt/android/res/drawable-hdpi/bitcoin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.4 KiB |
BIN
src/qt/android/res/drawable-ldpi/bitcoin.png
Normal file
BIN
src/qt/android/res/drawable-ldpi/bitcoin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
BIN
src/qt/android/res/drawable-mdpi/bitcoin.png
Normal file
BIN
src/qt/android/res/drawable-mdpi/bitcoin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
BIN
src/qt/android/res/drawable-xhdpi/bitcoin.png
Normal file
BIN
src/qt/android/res/drawable-xhdpi/bitcoin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.7 KiB |
BIN
src/qt/android/res/drawable-xxhdpi/bitcoin.png
Normal file
BIN
src/qt/android/res/drawable-xxhdpi/bitcoin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
BIN
src/qt/android/res/drawable-xxxhdpi/bitcoin.png
Normal file
BIN
src/qt/android/res/drawable-xxxhdpi/bitcoin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
29
src/qt/android/src/org/bitcoincore/qt/BitcoinQtActivity.java
Normal file
29
src/qt/android/src/org/bitcoincore/qt/BitcoinQtActivity.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package org.bitcoincore.qt;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.system.ErrnoException;
|
||||||
|
import android.system.Os;
|
||||||
|
|
||||||
|
import org.qtproject.qt5.android.bindings.QtActivity;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class BitcoinQtActivity extends QtActivity
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
final File bitcoinDir = new File(getFilesDir().getAbsolutePath() + "/.bitcoin");
|
||||||
|
if (!bitcoinDir.exists()) {
|
||||||
|
bitcoinDir.mkdir();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Os.setenv("QT_QPA_PLATFORM", "android", true);
|
||||||
|
} catch (ErrnoException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
}
|
||||||
|
}
|
@@ -466,6 +466,12 @@ int GuiMain(int argc, char* argv[])
|
|||||||
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||||
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||||
|
|
||||||
|
#if defined(QT_QPA_PLATFORM_ANDROID)
|
||||||
|
QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar);
|
||||||
|
QApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
|
||||||
|
QApplication::setAttribute(Qt::AA_DontUseNativeDialogs);
|
||||||
|
#endif
|
||||||
|
|
||||||
BitcoinApplication app;
|
BitcoinApplication app;
|
||||||
QFontDatabase::addApplicationFont(":/fonts/monospace");
|
QFontDatabase::addApplicationFont(":/fonts/monospace");
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user