Android

参考

安卓开发中必备的那些神器APP

参考链接

1. apkpure

==强烈推荐!!!!!==

  • 无需Google play 即可下载 play 商店里的各种应用

2. 当前Activity

参考链接

3. vysor

4. MLManager

  • 该款软件是一个95年的西班牙朋友写的,只要用来提取apk到本地,分享apk。国内也有一款类似的软件,和这个风格一样,咕咚大神写的AppPlus,遗憾的国内的不支持提取系统应用,如果提取小米手机的扫一扫等系统应用就望而却步了

5. easydeviceinfo

参考链接

6. Trinea

参考链接

7. 安卓开源库收集整理:

参考链接

Android Studio

Android Studio 导入 Android 源码

参考链接

配置调试cocos2dx

1. 环境

  • Android Studio 2.3.3
  • NDK 16
  • LLDB

通过选择 Tools - Android - SDK Manager - SDK Tools - 选择LLDB和NDK进行安装

查看 Files - Project Structure - SDK Location - Android NDK location: 选择通过上面步骤下载的NDK路径(ndk-bundle目录的)

  • cocos2dx 3.15以上

2. 修改proj.android-studio\app\jni\Android.mk

在你的ndk目录下修改build/core/default-build-commands.mk

将:

1
TARGET_FORMAT_STRING_CFLAGS := -Wformat -Werror=format-security

修改为:

1
TARGET_FORMAT_STRING_CFLAGS := -Wformat   #-Werror=format-security
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := MyGame_shared

LOCAL_MODULE_FILENAME := libMyGame

define walk
$(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef

define uniq
$(eval seen :=) $(foreach _,$(1),$(if $(filter ${_},${seen}),,$(eval seen += ${_}))) ${seen}
endef

ALLFILES = $(call walk, $(LOCAL_PATH)/../../../Classes)

FILE_LIST := $(filter %.cpp, $(ALLFILES))
FILE_LIST += $(filter %.c, $(ALLFILES))
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

$(info "LOCAL_SRC_FILES path:"$(LOCAL_SRC_FILES))

FILES_PATH := $(LOCAL_PATH)/../../../Classes
FILE_INCLUDES := $(dir $(foreach src_path,$(FILES_PATH), $(call walk,$(src_path),*/) ) )
FILE_INCLUDES := $(call uniq,$(FILE_INCLUDES))

LOCAL_C_INCLUDES := $(FILE_INCLUDES) \
$(LOCAL_PATH)/../../../cocos2d \
$(LOCAL_PATH)/../../../cocos2d/external \
$(LOCAL_PATH)/../../../cocos2d/cocos \
$(LOCAL_PATH)/../../../cocos2d/cocos/audio/include

$(info "LOCAL_C_INCLUDES path:"$(LOCAL_C_INCLUDES))

LOCAL_STATIC_LIBRARIES := cocos2dx_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,.)

3. 修改Application.mk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
}
}

allprojects {
repositories {
jcenter()
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

Android Studio问题

0. Android Studio c++ 无法单步调试的系列坑

参考链接

问题描述

1
2
3
4
5
UnsupportedMethodException
Unsupported method: AndroidProject.getPluginGeneration().
The version of Gradle you connect to does not support that method.
To resolve the problem you can change/upgrade the target version of Gradle you connect to.
Alternatively, you can ignore this exception and read other information from the model.

解决方法

  • 关闭Instant Run。

Windows & Linux:

  • File -> Settings -> Build, Execution, Deployment -> Instant Run.

Mac:

  • Android Studio -> Preferences -> Build, Execution, Deployment -> Instant Run.

1. androidstudio升级gradle

参考链接

解决步骤

  1. radle官网上下载2.13包,直接解压
  2. 在androidstudio的file–setting中搜索gradle设置gradle文件直接指向本地目录的刚才解压的路径

2. AndroidStudio如何配置NDK/JNI开发环境

参考链接

3. Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’.

问题描述

Android Studio 重复引入包的问题和解决方案

比如 app module 与 library module 各自 libs 目录中嵌入了相同的 Jar 包。这种情况也比较好解决,只需要将 app module 下的重复 jar 包删除即可。

4. error: format not a string literal and no format arguments [-Werror=format-security]

解决方法

在你的ndk目录下修改build/core/default-build-commands.mk

将:

1
TARGET_FORMAT_STRING_CFLAGS := -Wformat -Werror=format-security

修改为:

1
TARGET_FORMAT_STRING_CFLAGS := -Wformat   #-Werror=format-security

也就是把后面部分用#号注释掉

Gradle

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。

Gradle基础

1. 概念

差异管理

通过gradle的productFlavor与buildtype可以实现静态级的差异控制可以参考

依赖管理

支持多方式依赖管理:包括从maven远程仓库、nexus私服、ivy仓库以及本地文件系统的jars或者dirs

这里可以找到所有你需要的依赖,而你需要的只是指定一个坐标,如下:

1
compile 'com.squareup.picasso:picasso:2.3.3'

剩下的依赖的寻找,下载,添加到classpath等你都不需要去关心,通过这种方式来维护依赖的好处有以下几点:

1
2
3
4
依赖不会进入到你的版本控制仓库中(默认会缓存到~/.gradle/下)
方便卸载装载依赖(只是一条坐标依赖,不需要删除即可)
方便的版本管理,如上图中的2.3.3既是picasso的版本号,若改为+就表示从中央仓库中下载最新的版本
不同工程的相同依赖不会存在重复副本(只在~/.gradle下存在一份)

项目部署

通过一些插件,可以实现自动将你的输出(.jar,.apk,.war…)上传到指定仓库,自动部署

基于groovy脚本构建,其build脚本使用groovy语言编写

2. Gradle 构建基础

Projects 和 tasks

任何一个 Gradle 构建都是由一个或多个 projects 组成。每个 project 包括许多可构建组成部分。 这完全取决于你要构建些什么。

每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成 javadoc,发布到某个仓库等操作。

1
2
3
4
5
task upper << {
String someString = 'mY_nAmE'
println "Original: " + someString
println "Upper case: " + someString.toUpperCase()
}

Output of gradle -q upper

1
2
3
> gradle -q upper
Original: mY_nAmE
Upper case: MY_NAME

任务依赖

1
2
3
4
5
6
task hello << {
println 'Hello world!'
}
task intro(dependsOn: hello) << {
println "I'm Gradle"
}

Output of gradle -q intro

1
2
3
> gradle -q intro
Hello world!
I'm Gradle

动态任务

1
2
3
4
5
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}

Output of gradle -q task1

1
2
> gradle -q task1
I'm task number 1

3. Gradle Java 构建

采用 Java 插件

1
apply plugin: 'java'

可以运行 gradle tasks 列出任务列表。这样便可以看到 Java 插件为你添加了哪些任务

添加 Maven 仓库

1
2
3
repositories {
mavenCentral()
}

添加依赖

1
2
3
4
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}

4. 多项目构建

定义一个多项目构建工程需要在根目录(本例中与 multiproject 同级)创建一个setting 配置文件来指明构建包含哪些项目。并且这个文件必需叫 settings.gradle 本例的配置文件如下:

1
include "shared", "api", "services:webservice", "services:shared"

工程依赖

同一个构建中可以建立工程依赖,一个工程的 jar 包可以提供给另外一个工程使用。例如我们可以让 api 工程以依赖于 shared 工程的 jar 包。这样 Gradle 在构建 api 之前总是会先构建 shared 工程。

1
2
3
dependencies {
compile project(':shared')
}