眼前多少难甘事,自古男儿当自强。这篇文章主要讲述Android android problem相关的知识,希望能为你提供帮助。
{
目录
一、Mac下de的java路径
二、android studio的编译命令
三、在cocos3.1.5中 android-studio中的build-cfg.json找不到了
四、导入第三方jar包:
五、文件同步Synchronize
六、找不到libs文件夹
七、android studio打包不同cpu架构的so文件
八 、如何解决Unable to get CMake version编译问题
九、Android Could not find method ndk
十、Your project contains C++ files but it is not using a supported native build system
十一、cocos run 安卓apk制作 AppDelegate.h 找不到
十二、Suggestion: add \'tools:replace="android:icon"\' to
element
十三、
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/util/ArrayMap;
十四、自动导入包名
十五、用AS直接连接到手机上能运行,安装apk就运行报错?
十六、更改版本号
十七、在cocos中 用 android studio调试 c++
十八、Manifest中使用${applicationId}写法
十九、android studio更改applicationId 和更改 包名package name
二十、关闭 Android Studio 新特性Instant Run
下面是正文
一、mac下JDK的安装路径苹果系统已经包含完整的J2SE,其中就有JDK和JVM(苹果叫VM)。当然如果要升级JDK,那当然要自己下载安装了。
在MAC系统中,jdk的安装路径与windows不同,默认目录是:/System/Libray/Frameworks/JavaVM.Framwork/。
在这个目录下有个Versions目录,里面有不同版本的jdk。
二、android studio的编译命令
cocos compile -p android --android-studio
三、在cocos3.1.5中 android-studio中的build-cfg.json找不到了
gradle supports copy assets &
compile scripts from engine 3.15
在android项目的app文件夹下面的build.gradle文件中配置 原来的build-cfg.json文件中的copy_resource,请看下面代码中的红色部分
android.applicationVariants.all { variant -> // delete previous files first delete "${buildDir}/intermediates/assets/${variant.dirName}" variant.mergeAssets.doLast { copy { from "${buildDir}/../../../../../res" into "${buildDir}/intermediates/assets/${variant.dirName}/res" }copy { from "${buildDir}/../../../../../src" into "${buildDir}/intermediates/assets/${variant.dirName}/src" }copy { from "${buildDir}/../../../../../res" into "${buildDir}/intermediates/assets/${variant.dirName}/restsss" }// copy { //from "${buildDir}/../../../../cocos2d-x/cocos/scripting/lua-bindings/script" //into"${buildDir}/intermediates/assets/${variant.dirName}/src/cocos" // } 省略..... }
四、导入第三方jar包:
eclipse中导入jar包是先将jar包复制到工程文件中,然后add to build path,但是在Android studio中可不是这样的。在Android studio中导入jar包的方法是:(以谷歌的gjson.jar为例)
将gson-2.3.jar文件拷贝到工程文件的libs目录下:
文章图片
导入之后,选中jar包,然后点击下图中箭头处的按钮:(synchronize:同步,可以理解为刷新)
文章图片
搞定。
五、文件同步Synchronize
操作步骤: File--Synchronize(同步) 或使用快捷键 Option + Command + Y
点击Synchronize (同步)后,它将从文件系统中加载文件,如果你有未保存的更攺,它将会提示你是否放弃更攺。
六、找不到libs文件夹
1、在app目录下心间libs文件夹
2.在app目录下的build.gradle的android结点中,填写上以下代码
sourceSets.main { java.srcDir "src" res.srcDir "res" jniLibs.srcDir "libs" manifest.srcFile "AndroidManifest.xml" }
七、android studio打包不同cpu架构的so文件
关于打cpu架构的so包的配置是在build.gradle文件中,就是下面的代码
externalNativeBuild { ndkBuild { if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo(\'none\') != 0) { // skip the NDK Build step if PROP_NDK_MODE is none targets \'cocos2dlua\' arguments \'NDK_TOOLCHAIN_VERSION=4.9\' arguments \'APP_PLATFORM=android-\'+PROP_TARGET_SDK_VERSIONdef module_paths = [project.file("../../../cocos2d-x").absolutePath, project.file("../../../cocos2d-x/cocos").absolutePath, project.file("../../../cocos2d-x/external").absolutePath] if (Os.isFamily(Os.FAMILY_WINDOWS)) { // should use \'/\' module_paths = module_paths.collect {it.replaceAll(\'\\\\\\\\\', \'/\')} arguments \'NDK_MODULE_PATH=\' + module_paths.join("; ") } else { arguments \'NDK_MODULE_PATH=\' + module_paths.join(\':\') }arguments \'-j\' + Runtime.runtime.availableProcessors() abiFilters.addAll(PROP_APP_ABI.split(\':\').collect{it as String}) } } }
关键要看这行
abiFilters.addAll(PROP_APP_ABI.split(\':\').collect{it as String})
其中PROP_APP_ABI定义在cradle.property文件中,不同的cpu用“:”分割,如下
//选择要添加的对应cpu类型的.so库。// 还可以添加 \'x86\', \'x86_64\', \'mips\', \'mips64\'
PROP_APP_ABI=armeabi:armeabi-v7a:armeabi-v8a
其中的abiFilters,是cpu 过滤,最后打完的包智慧包含在abiFilters中定义的cpu架构
在app目录下的build.gradle的defaultConfig对象中加入下面的代码
defaultConfig {
ndk { //选择要添加的对应cpu类型的.so库。// 还可以添加 \'x86\', \'x86_64\', \'mips\', \'mips64\' abiFilters \'armeabi\', \'armeabi-v7a\', \'arm64-v8a\' moduleName "app" }
}
八 、如何解决Unable to get CMake version编译问题
- 打开SDK Manager(点菜单“File”->
“Settings") ,检查"SDK Tools” 选项中CMake 选项,这里应该没有勾选和安装CMake
九、Android Could not find method ndk
把 ndk 放在 defaultConfig 里面
defaultConfig {
ndk {
}
}
十、Your project contains C++ files but it is not using a supported native build system
首先在工程目录下的gradle.properties文件的末尾加上一句:Android.useDeprecatedNdk=true
如图:
文章图片
然后再在文件build.gradle(Module:app)里面的buildTypes类中添加一个这样的方法
- sourceSets {
- main {
- jni.srcDirs = []
- }
- }
文章图片
这样就可以编译成功了
十一、cocos run 安卓apk制作 AppDelegate.h 找不到
Android.mk的LOCAL_PATH 指到了 jni目录中,所以eclipse和android studio中目录指向差了一个层级
eclipse中这样的话
LOCAL_C_INCLUDES := \\ $(LOCAL_PATH)/../../Classes \\
android studio中就应该是像下面这样,多往上面找一个层级
LOCAL_C_INCLUDES := \\ $(LOCAL_PATH)/../../../Classes \\
十二、Suggestion: add \'tools:replace="android:icon"\' to element
今天在用Android Studio开发时,遇到一个问题,建了一个项目,依赖了一个自己写的库,在编译时报了这个错误,大致的原因是资源与库在清单文件里引用了相同的资源文件,Gradle插件默认会启用Manifest Merger Tool,就会发生冲突。
错误提示:
Error:Execution failed for task \':loggertest:processDebugManifest\'. Manifest merger failed : Attribute application@icon value=https://www.songbingjia.com/android/(@mipmap/iclauncher) from AndroidManifest.xml:7:9-43 is also present at [TuringOSLoggerAPI:app:unspecified] AndroidManifest.xml:16:9-45 value=(@drawable/iclauncher). Suggestion: add /'tools:replace="android:icon"\' to element at AndroidManifest.xml:5:5-18:19 to override.解决方法
- 将依赖库中清单文件,引用的依赖库的清单文件中的,冲突部分删除掉,我这里主要删除了< android:icon="@drawable/ic_launcher"> ,删除过后,编译正常,程序编译通过
- 根据IDE提示修改,首先在项目的清单文件的根标签下引入xmlns:tools="http://schemas.android.com/tools",注意不是依赖库的的清单文件里,已测试不可行,之后在application里的标签里加入tools:replace="android:icon"之后重新build,即可通过编译,theme问题同样这样解决:tools:replace=”android:icon, android:theme”,如下:注意红色部分的位置
< ?xml version="1.0" encoding="utf-8"?> < manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.smallhut.dd" android:versionCode="1" android:versionName="1.1.0" android:installLocation="auto" xmlns:tools="http://schemas.android.com/tools"> < uses-sdk android:minSdkVersion="9"android:targetSdkVersion="25"/> < uses-feature android:glEsVersion="0x00020000" /> < application android:name="org.cocos2dx.lua.tst" android:allowBackup="true" android:label="@string/app_name" android:icon="@drawable/icon" tools:replace="android:name">
十三、 java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/util/ArrayMap;
在依赖中加上 compile \'com.android.support:support-v4:24.2.0\'
Android Studio如何导入android-support-v4,v7,v13等支持包?在Android Studio中:
项目右键->
Open Module Settings->
点选Modules下面的app->
点击进入Dependencies->
点击右上角+ ->
【Android android problem】点选Library dependency ,在其中选择你需要的support包版本添加即可
十四、自动导入包名
因为as默认是不会自动导包的,所以导包需要设置。
File--> Settings--> Editor--> General--> Auto Import
文章图片
自动导入就是把
1. insert imports on paste 选项改为All。
2.勾上Optimize imports on the fly
3.勾上Add umambiguous imports on the fly
如下图
文章图片
十五、用AS直接连接到手机上能运行,安装apk就运行报错?
取消instantRun
文章图片
十六、更改版本号
eclipse里面在AndroidManifest.xml文件里面修改版本号
android:versionCode="5" android:versionName="1.1.0"
androidstudio里面在build.gradle文件里面修改版本号
versionCode 5 versionName "1.1.0"
十七、在cocos中 用 android studio调试 c++
在设置页面 Appearance & Behavior ,打开System Settings-> Android SDK 中,选中CMake,LLDB,NDK,下载成功之后,在项目设置页面,ndk要设置为刚才下载的NDK,目录在sdk-> ndk build 目录中,这样就可以调试c++了。
开始的时候,我选择了自己的ndk-r10d,不能调试c++,选中了刚才下载的ndk,然后rebuild,就可以调试c++了
文章图片
十八、Manifest中使用${applicationId}写法
在
Manifest
中使用${applicationId}
- 如
Provider
在声明android:authorities
(该值必须唯一)时,如前缀为写死的包名字符串,当出现需要同一工程分包、分渠道打包时,安装在同一android
设备将导致INSTALL FAILED CONFLICTING PROVIDER
的报错(使用adb
安装会有提示),这时可以使用${applicationId}
,这将避免android:authorities
值非唯一的问题。
- < provider
- android:name="xxxx.xxxx.xxx.xxxProvider"
- android:authorities="${applicationId}.xxxx"
- android:grantUriPermissions="true"
- android:exported="false"/>
${applicationId}
也可以用在Manifest
中其他需要唯一的取值情况,这种使用方式很灵活
十九、android studio更改applicationId 和更改 包名package name
更改applicationId,在build.gradle 文件中,更改applicationId,然后同步build.gradle
更改package name ,在androidManifest.xml文件中,选中
package="com.small.xxx"
然后右键选择refractor -> rename ,然后填写需要更改的包名,然后点击refactor按钮,开始查找,会在find页面中弹出来找到的相关文件,然后点击do refactor 就可以修改包名了
二十、关闭 Android Studio 新特性Instant Run
1.打开项目,左上角的Android Studio preferences(注意:一定要在这里打开,欢迎页面里面的Setting是不可勾选的!!!!!)
2、点击 instant Run
3、取消勾选所有选项
}
推荐阅读
- Android 架构组件 之 ViewModel 学习
- Reface.AppStarter 框架初探
- Android应用加固的简单实现方案
- wake up on lan 安卓手机控制局域网唤醒开机+远程关机
- flask 源码专题(app.run()的背后)
- 安卓计步器的简单实现
- Android_校易app开发日志_第三天
- R switch语句示例图解
- R散点图示例图解