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目录下:

Android android problem

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

Android android problem

搞定。

 

五、文件同步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 
如图: 
Android android problem 
然后再在文件build.gradle(Module:app)里面的buildTypes类中添加一个这样的方法

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

如下图所示 
Android android problem
这样就可以编译成功了

十一、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  

Android android problem

 

自动导入就是把

1. insert imports on paste 选项改为All。

2.勾上Optimize imports on the fly 

3.勾上Add umambiguous imports on the fly

 

如下图

Android android problem

 

十五、用AS直接连接到手机上能运行,安装apk就运行报错?

取消instantRun

Android android problem

 

十六、更改版本号

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++了

Android android problem

 

十八、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、取消勾选所有选项

}

Android android problem

上一篇:Qt Quick 构建 Android app


下一篇:vlc for android 编译过程