zoukankan      html  css  js  c++  java
  • 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目录下:

    1ff80ab1-9b73-4500-8647-7554a4453317

    导入之后,选中jar包,然后点击下图中箭头处的按钮:(synchronize:同步,可以理解为刷新)

    462c6e87-5525-43eb-abfc-69165941bb66

    搞定。

     

    五、文件同步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_VERSION
    
                def 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编译问题

    1. 打开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类中添加一个这样的方法

    1. sourceSets {
    2. main {
    3. jni.srcDirs = []
    4. }
    5. }

    如下图所示 
    这里写图片描述
    这样就可以编译成功了

    十一、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=(@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.

    解决方法

    1. 将依赖库中清单文件,引用的依赖库的清单文件中的,冲突部分删除掉,我这里主要删除了<android:icon="@drawable/ic_launcher">,删除过后,编译正常,程序编译通过
    2. 根据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->

    点击右上角+ ->

    点选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值非唯一的问题。

      1. <provider
      2. android:name="xxxx.xxxx.xxx.xxxProvider"
      3. android:authorities="${applicationId}.xxxx"
      4. android:grantUriPermissions="true"
      5. 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、取消勾选所有选项

    }

  • 相关阅读:
    消息中间件——RabbitMQ(一)Windows/Linux环境搭建(完整版)
    数据结构与算法(一):带你了解时间复杂度和空间复杂度到底是什么?
    作为一技术人员,面试前都需要做哪些准备?
    消息中间件——RocketMQ(一) 环境搭建(完整版)
    从“数学归纳法”到理解“递归算法”!
    深入浅出了解“装箱与拆箱”
    PMP备考指南之第二章:项目运作环境
    PMP备考指南之第一章:引论
    PMP备考指南之相关事项介绍
    7月新的开始
  • 原文地址:https://www.cnblogs.com/YZFHKMS-X/p/12635669.html
Copyright © 2011-2022 走看看