赞
踩
- cd frameworks\runtime-src\proj.android-studio
- gradlew
gradlew命令其实运行的是proj.android-studio目录下的gradlew.bat脚本
第一次会提示没有java
- ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
- Please set the JAVA_HOME variable in your environment to match the
- location of your Java installation.
在Java下载页面,我选择的是jdk8,安装完毕,检查下Java是否正确安装
https://upload-images.jianshu.io/upload_images/3375785-467cb4d14b90119b.png?imageMogr2/auto-orient/strip|imageView2/2/w/548/format/webp
重新执行gradlew,会下载需要的gradle
运行失败,提示
> SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.
我使用的是android-sdk_r24.4.1-windows
定义local.properties文件,或者定义ANDROID_HOME环境变量
我选择增加local.properties文件,需要注意路径的书写方式
sdk.dir=D://dev/android-sdk-windows
再次执行gradlew
- > You have not accepted the license agreements of the following SDK components:
- [Android SDK Build-Tools 26.0.2, Android SDK Platform 29].
- Before building your project, you need to accept the license agreements and complete the installation of the missing components using the Android Studio SDK Manager.
- Alternatively, to learn how to transfer the license agreements from one workstation to another, go to http://d.android.com/r/studio-ui/export-licenses.html
提示指定版本的sdk的license有问题,我选择了重新安装来绕过了这个问题
运行SDK Manager.exe
,重新安装下build-tools
和sdk platform
再次执行gradlew,提示ndk没有配置
- > NDK not configured.
- Download it with SDK manager
查阅资料得知cocos2dx v3.16
官方建议使用NDK r14
在local.properties中配置
ndk.dir=D://dev//android-ndk-r14b
再次执行,如果发现报错NDK中缺少ABI,多半是NDK版本混用导致的
> No toolchains found in the NDK toolchains folder for ABI with prefix: aarch64-linux-android
再次执行,发现项目可以正常通过,但是libcocos2dx缺少对应的sdk,同步骤3,安装即可
- A problem occurred configuring project ':libcocos2dx'.
- > You have not accepted the license agreements of the following SDK components:
- [Android SDK Platform 14].
如果你看到如下图所示的build successful,只是说明通过了配置的环境检查
根据上一步的提示:
gradlew --help
可以查看详细的命令参数
- USAGE: gradlew [option...] [task...]
-
- -?, -h, --help Shows this help message.
- -a, --no-rebuild Do not rebuild project dependencies.
- -b, --build-file Specify the build file.
- --build-cache Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds. [incubating]
- -c, --settings-file Specify the settings file.
- --configure-on-demand Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds. [incubating]
- --console Specifies which type of console output to generate. Values are 'plain', 'auto' (default) or 'rich'.
- --continue Continue task execution after a task failure.
- -D, --system-prop Set system property of the JVM (e.g. -Dmyprop=myvalue).
- -d, --debug Log in debug mode (includes normal stacktrace).
- --daemon Uses the Gradle Daemon to run the build. Starts the Daemon if not running.
- --foreground Starts the Gradle Daemon in the foreground. [incubating]
- -g, --gradle-user-home Specifies the gradle user home directory.
- -I, --init-script Specify an initialization script.
- -i, --info Set log level to info.
- --include-build Include the specified build in the composite. [incubating]
- -m, --dry-run Run the builds with all task actions disabled.
- --max-workers Configure the number of concurrent workers Gradle is allowed to use. [incubating]
- --no-build-cache Disables the Gradle build cache. [incubating]
- --no-daemon Do not use the Gradle Daemon to run the build.
- --no-scan Disables the creation of a build scan. (https://gradle.com/build-scans) [incubating]
- --offline Execute the build without accessing network resources.
- -P, --project-prop Set project property for the build script (e.g. -Pmyprop=myvalue).
- -p, --project-dir Specifies the start directory for Gradle. Defaults to current directory.
- --parallel Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use. [incubating]
- --profile Profile build execution time and generates a report in the <build_dir>/reports/profile directory.
- --project-cache-dir Specify the project-specific cache directory. Defaults to .gradle in the root project directory.-q, --quiet Log errors only.
- --recompile-scripts Force build script recompiling.
- --refresh-dependencies Refresh the state of dependencies.
- --rerun-tasks Ignore previously cached task results.
- -S, --full-stacktrace Print out the full (very verbose) stacktrace for all exceptions.
- -s, --stacktrace Print out the stacktrace for all exceptions.
- --scan Creates a build scan. Gradle will emit a warning if the build scan plugin has not been applied. (https://gradle.com/build-scans) [incubating]
- --status Shows status of running and recently stopped Gradle Daemon(s).
- --stop Stops the Gradle Daemon if it is running.
- -t, --continuous Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change. [incubating]
- -u, --no-search-upward Don't search in parent folders for a settings.gradle file.
- -v, --version Print version info.
- -w, --warn Set log level to warn.
- -x, --exclude-task Specify a task to be excluded from execution.

在gradlew tasks
命令中,我们会发现很多task
- ------------------------------------------------------------
- All tasks runnable from root project
- ------------------------------------------------------------
-
- Android tasks
- -------------
- androidDependencies - Displays the Android dependencies of the project.
- signingReport - Displays the signing info for each variant.
- sourceSets - Prints out all the source sets defined in this project.
-
- Build tasks
- -----------
- assemble - Assembles all variants of all applications and secondary packages.
- assembleAndroidTest - Assembles all the Test applications.
- assembleDebug - Assembles all Debug builds.
- assembleRelease - Assembles all Release builds.
- build - Assembles and tests this project.
- buildDependents - Assembles and tests this project and all projects that depend on it.
- buildNeeded - Assembles and tests this project and all projects it depends on.
- clean - Deletes the build directory.
- cleanBuildCache - Deletes the build cache directory.
- compileDebugAndroidTestSources
- compileDebugSources
- compileDebugUnitTestSources
- compileReleaseSources
- compileReleaseUnitTestSources
- extractDebugAnnotations - Extracts Android annotations for the debug variant into the archive file
- extractReleaseAnnotations - Extracts Android annotations for the release variant into the archive file
- mockableAndroidJar - Creates a version of android.jar that's suitable for unit tests.
- Build Setup tasks
- -----------------
- init - Initializes a new Gradle build.
- wrapper - Generates Gradle wrapper files.
- Help tasks
- ----------
- buildEnvironment - Displays all buildscript dependencies declared in root project 'proj.android-studio'.
- components - Displays the components produced by root project 'proj.android-studio'. [incubating]
- dependencies - Displays all dependencies declared in root project 'proj.android-studio'.
- dependencyInsight - Displays the insight into a specific dependency in root project 'proj.android-studio'.
- dependentComponents - Displays the dependent components of components in root project 'proj.android-studio'. [incubating]
- help - Displays a help message.
- model - Displays the configuration model of root project 'proj.android-studio'. [incubating]
- projects - Displays the sub-projects of root project 'proj.android-studio'.
- properties - Displays the properties of root project 'proj.android-studio'.
- tasks - Displays the tasks runnable from root project 'proj.android-studio' (some of the displayed tasks may belong to subprojects).
- Install tasks
- -------------
- installDebug - Installs the Debug build.
- installDebugAndroidTest - Installs the android (on device) tests for the Debug build.
- installRelease - Installs the Release build.
- uninstallAll - Uninstall all applications.
- uninstallDebug - Uninstalls the Debug build.
- uninstallDebugAndroidTest - Uninstalls the android (on device) tests for the Debug build.
- uninstallRelease - Uninstalls the Release build.
- Verification tasks
- ------------------
- check - Runs all checks.
- connectedAndroidTest - Installs and runs instrumentation tests for all flavors on connected devices.
- connectedCheck - Runs all device checks on currently connected devices.
- connectedDebugAndroidTest - Installs and runs the tests for debug on connected devices.
- deviceAndroidTest - Installs and runs instrumentation tests using all Device Providers.
- deviceCheck - Runs all device checks using Device Providers and Test Servers.
- lint - Runs lint on all variants.
- lintDebug - Runs lint on the Debug build.
- lintRelease - Runs lint on the Release build.
- lintVitalRelease - Runs lint on just the fatal issues in the release build.
- test - Run unit tests for all variants.
- testDebugUnitTest - Run unit tests for the debug build.
- testReleaseUnitTest - Run unit tests for the release build.

其中Build Tasks
中的build
是我们需要的打包命令
gradlew build --build-cache
加快打包速度:
--build-cache Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds. [incubating]
- process_begin: CreateProcess(NULL,
- D:/dev/android-ndk-r14b/build//../toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++
- -MMD -MP -MF
- .... 我这里做了省略,这里的报错超级超级长
- ...) failed.
- make (e=2): ?????????????????
CreateProcess
给出的报错信息中,使用到了ndk的一个目录下的文件ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++
实际上,我发现是没有这个文件的
https://upload-images.jianshu.io/upload_images/3375785-51bf2cbf9008f789.png?imageMogr2/auto-orient/strip|imageView2/2/format/webp
然后我下载了r16b
解压后发现是有的:
切换到r16b后再次进行编译
- /frameworks/cocos2d-x/cocos/3d/../platform/CCPlatformMacros.h:221:67:
- error: format not a string literal and no format arguments [-Werror=format-security]
- #define CCLOGERROR(format,...) cocos2d::log(format, ##__VA_ARGS__)
LOCAL_DISABLE_FORMAT_STRING_CHECKS :=true
APP_CFLAGS += -Wno-error=format-security
意思是无视这个error
add_definitions (-Wno-format-security)
即可。[-Werror,-WXXX]
则add_definitions (-Wno-XXX)
。- error: undefined reference to 'vtable
- the vtable symbol may be undefined because the class is missing its key function
把构造,析构的实现放在cpp里面就解决了
build.gradle 4.x 需要下载Android Studio3.0
gradle.properties
修改jvm options即可,堆空间设置的大一点
- # Specifies the JVM arguments used for the daemon process.
- # The setting is particularly useful for tweaking memory settings.
- # Default value: -Xmx10248m -XX:MaxPermSize=256m
- # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
- org.gradle.jvmargs=-Xmx4096m
gradlew installDebug
手机系统中有应用阻止了安装
小米手机:在手机的开发者模式中关闭MIUI优化
- * What went wrong:
- Execution failed for task ':xxxx:lint'.
- > Lint found errors in the project; aborting build.
-
- Fix the issues identified by lint, or add the following to your build script to proceed with errors:
- ...
- android {
- lintOptions {
- abortOnError false
- }
- }
- ...
按照fix提示,修改build.gradle即可
类似问题最好遇到一次记录一次,防止反复查阅,很费时间的
作者:许彦峰
链接:https://www.jianshu.com/p/228252dec692
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。