android 开发遇到的问题总结--不定期更新

本文档详细解答了Android开发中常见的技术难题,包括.9图片兼容性问题、Android 5.0后Toolbar阴影移除、Cocos2d-x环境下Android Studio开发流程、Android源码编译遇到的错误处理方法、点击变色实现方式以及Switch控件状态改变引发的回调问题。
摘要由CSDN通过智能技术生成

一、.9图片在eclipse中正常,android studio中异常

Error:Execution failed for task’:app:mergeDebugResources’. 
Crunching Cruncher image.9.png failed, see logs 

原因:

.9图片不标准,在eclipse没有android studio中严格被检测出错

解决:

用android studio 打开.9图片重新画线

.9图片规则:

由于 .9 图的上边界和左边界的划线是负责拉伸扩展的,
而下边界和右边界划线则是内容区域,
所以 .9 图不允许右侧和下边界有两条划线,
而左边界和上边界则没有问题。

二、android 5.0之后toolbar阴影怎么去除

解决:

activity中添加代码 getSupportActionBar().setElevation(0);

三、利用android studio 开发Cocos2d-x

1.创建HelloWorld项目

解压下载的文件xxx
进入到目录xxx/tools/cocos2d-console/bin/cocos.py
打开终端运行cocos.py脚本创建文件

./cocos.py new HelloWorldDemo -p com.coco2dx.org -l cpp -d ~/Desktop
或者
python cocos.py new HelloWorldDemo -p com.coco2dx.org -l cpp -d ~/Desktop

2.进入创建的项目的 proj.android-studio目录

cd proj.android-studio

执行

xxx/tools/cocos2d-console/bin/cocos compile -p android --android-studio

等待编译成功
将proj.android-studio 导入到android studio 就可以了

3.执行过程中会出现问题,需要添加sdk,jdk,ndk的环境变量

$cd ~
$open .bash_profile
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home
export ANDROID_SDK_ROOT=/Users/mangues/Library/Android/sdk
export ANDROID_JAVA_HOME=${JAVA_HOME}
export NDK_ROOT=//Users/mangues/Library/Android/sdk/ndk-bundle
PATH=~/bin:$PATH

export PATH=${PATH}:${JAVA_HOME}:${ANDROID_SDK_ROOT}:${NDK_ROOT}:${ANDROID_SDK_ROOT}/tools:${ANDROID_SDK_ROOT}/platform-tools

4.如果使用Genymotion 运行helloword程序会出现

 java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/com.coco2dx.org-2/lib/arm/libMyGame.so" has unexpected e_machine: 40
                      at java.lang.Runtime.loadLibrary(Runtime.java:372)
                      at java.lang.System.loadLibrary(System.java:1076)
                      at org.cocos2dx.lib.Cocos2dxActivity.onLoadNativeLibraries(Cocos2dxActivity.java:248)
                      at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:264)

原因:

因为genymotion用的是virtualbox来模拟android设备,所以android系统的架构应该是x86而不是arm,因此,我们的jni的配置应该作相应的改变,这个改变不会太大,但是所有的cocos链接库都要重新编译为支持x86的版本

解决:

按照http://blog.csdn.net/c860_zy/article/details/21410339

安装上面方法 并没有在android studio上解决,只能在手机上运行了,希望解决的朋友告知一下

四、android源码编译问题

5.1 Jack “Out of memory error”

错误日志:

Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.

增加Java虚拟机的-Xmx大小,即设置一个较大的堆内存上限。

可以修改Jack的配置文件prebuilts/sdk/tools/jack-admin。
这时一个管理Jack的shell脚本,找到start-server函数,直接修改其启动参数,由原来的

JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"

改为

JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"
1

此时Jack服务器仍然在后台执行,所以我们需要将其停止,然后重启启动(make会自动启动Jack服务器)才能使得修改后的参数生效。

我们执行下面的命令

$ ./prebuilts/sdk/tools/jack-admin stop-server

然后我们重新执行make -jN命令(N是你前边设置的并行任务数量)开始编译。

5.2 SecureTransport Unsupported curl

Jack server failed to (re)start, see Jack server log Unsupported curl, please use a curl not based on SecureTransport Unsupported curl, please use a curl not based on SecureTransport ninja: build stopped: subcommand failed. make: *** [ninja.intermediate] Error 1

第一种方法:使用 Homebrew:

brew install curl --with-openssl
export PATH=$(brew --prefix curl)/bin:$PATH
caffeinate make -j4

第二种方法:

检测你的curl版本
$ /usr/bin/curl --version

curl 7.43.0 (x86_64-apple-darwin15.0) libcurl/7.43.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets 

output include SecureTransport错误 你需要安装openssl编译的curl
从下面地址下载curl:
http://curl.haxx.se/download.html
然后编译:
./configure --prefix=/usr/local/curl --with-ssl=/usr/local/Cellar/openssl/1.0.2d_1

接着增加环境变量到 .bash_profile
export PATH="/usr/local/curl/bin:$PATH"

打开新的终端 检测下curl版本:
$ curl --version
curl 7.46.0 (x86_64-apple-darwin15.2.0) libcurl/7.46.0 OpenSSL/1.0.2d zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 

5.3 /bin/bash: xz: command not found

/bin/bash: xz: command not found
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error 1

xz这个解压工具没有安装XZ在MAC系统下的安装与使用

五、android 点击变色问题

1.color选择drawable选择

<item> tag requires a 'drawable' attribute or child tag defining a drawable

以上问题是因为background 用了color选择器,错误代码如下:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" android:color="@color/white_pressed"></item>
    <item android:state_pressed="false" android:color="@color/white"></item>
</selector>

解决: color 修改位 drawable

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" android:drawable="@color/white_pressed"></item>
    <item android:state_pressed="false" android:drawable="@color/white"></item>
</selector>

drawable用在背景颜色变化上 background

六、开发问题

1.switch控件,解决利用setChecked 控制switch开关时 自动调用onCheckedChanged方法引起反复调用的问题

  @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        switch (buttonView.getId()) {
            case R.id.sc_key:
                isCheckBoolean = isChecked;
                if (isChecked) {
                    repairePresenter.changeCarState(1, orderBean.getBikeNumber());//调用网络,失败调用onChangeCarStateFailure
                } else {
                    repairePresenter.changeCarState(0, orderBean.getBikeNumber());
                }
                break;
        }
    }
 public void onChangeCarStateFailure(String message) {
        scKey.setOnCheckedChangeListener(null);  //反注册,解决代码自动修改状态 引起的onCheckedChanged调用
        isCheckBoolean = !isCheckBoolean;
        scKey.setChecked(isCheckBoolean);
        scKey.setOnCheckedChangeListener(this);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值