【Android开发工作笔记】一些零零星星的tips

这篇博客主要记录了Android开发中的若干实用技巧,包括图标处理、纹理获取、Eclipse ADT配置、C++调用JAVA方法、Android事件监听、错误定位、API级别对应、CDT builder的添加等。此外,还分享了字符串加密、获取手机IMSI和IMEI码的方法。
摘要由CSDN通过智能技术生成

 本bo不记录主要的逻辑(毕竟我技术这么shi),谈谈一些小的交互细节,技术含量都不高(毕竟新人,大拿请移驾么么哒)


1.关于icon:(必须是png,有阿法通道(Alpha Channel),这个初学者多多少少会被坑)

作为一个美术技术相结合(误)的猿类,换icon这种事还是很乐意去做的~

   Android和ios不同,在adt环境下,相应的res文件夹下,找到不同px的图片,替换之

   iOS下,在工程的Assets.xcassets内找到icon选项,选择相应px的png图片,替换之(ps.一定要注意px!)


2.关于取Texture(通过SpriteBatchNode获取),可以用CCSprite* createWithTexture(batch_map)->ccRectMake(x,y,w,h)来get资源cache,从而渲染,获取具体资源的position可以从对应的plist里查找!!


3.关于Ecilpse ADT 中的Android工程环境的配置(初学者的我觉得异常恶心),需要配置工程路径有NDK_MOUNDLE_PATH,NDK-Build路径,(需要在计算机的环境配置中添加相应路径)


4.一些小bug的处理,当Android中的临时文件(.o结尾)若比引用文件或更改后的原文件要新,这时候会出现编译不符的现象,解决方案就是删掉这些临时文件(如更改cocos的scrollView文件,run后然并卵,这是后把pro.Android/bin/obj中对应的文件删掉就行了)


5.String 转成const char*类型----->在调用的地方尾部加上.c_str(); /注:在此贴上一个大大的博文

<span style="background-color: rgb(255, 204, 204);">语法: 
const char *c_str();
c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 
比如:最好不要这样: 
char* c; 
string s="1234"; 
c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理,同时,编译器也将报错——将一个const char *赋与一个char *。

应该这样用: 
char c[20]; 
string s="1234"; 
strcpy(c,s.c_str()); 
这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作</span><span style="background-color: rgb(255, 252, 246);">
</span>

贴一个有用的但是以前没见过的CCApplication:

在cocos2d中,CCApplication主要做三件事情:
         1. 控制应用程序的生命周期
         2. 提供和管理一些全局的资源
         3. 处理Touch
         4. 循环绘制界面

关于ecilpse中某个文件夹没有导入的问题,可以在相应的文件夹下右击选择properties->resources->EDIT->选择相应的路径就行


6.关于C++调用JAVA:

在相应的cpp里加上jni.h 和platform/android/jni/JniHelper.h 这两个头文件

调用方法(贴代码)

         JniMethodInfo minfo;//创建对象
if (JniHelper::getStaticMethodInfo(minfo, "com/dros/trac/fant/longzhuBall",
     "ExitGame","()I"))

/*参数一:JniMethodInfo的引用

参数二:调用的类的路径

参数三:方法名

参数四:函数类型简写



7. 关于Android机子返回键绑定事件。

   public boolean onKeyDown(int keyCode, KeyEvent event)  

  KeyEvent.KEYCODE_MENU 安卓home键, KeyEvent.KEYCODE_BACK  back按键


8.利用Android的crash log 来定位error:

关于日志输出tips:(摘录网上大大的)

 log start:*** *** *** *** *** *** ***

 第二行显示Android版本

 第三行显示当前的线程id(pid)和进程(tid),若崩溃的是主线程的话,pid和tid是一样的

 第四行是unix信号,标识段错误

 定位步骤如下:

  1). 运行cmd,跳转到Android sdk目录下,如 cd /Users/name/Android/adt-bundle-mac-x86_64-20131030/sdk/platform-tools 
  2).  ./adb logcat | (android nkd-stack path) -sym / android project.so path
 如./adb logcat | /Users/name/Android/android-ndk-r8e/ndk-stack -sym /Users/name/test/proj.android/obj/local/armeabi
 3).开启debug模式,ok!


9.关于API level 的,贴个关系对应图:

Android版本名和API Level关系全称

Android的版本

Android版本名称Code name

Android的API level

Android 1.0 (API level 1)

1.0

(no code name)

API level 1

Android 1.1 (API level 2)

1.1

(no code name)

API level 2

Android 1.5 Cupcake (API level 3)

1.5

Cupcake

API level 3, NDK 1

Android 1.6 Donut (API level 4)

1.6

Donut

API level 4, NDK 2

Android 2.0 Eclair (API level 5)

2.0

Eclair

API level 5

Android 2.0.1 Eclair (API level 6)

2.0.1

Eclair

API level 6

Android 2.1 Eclair (API level 7)

2.1

Eclair

API level 7, NDK 3

Android 2.2–2.2.3 Froyo (API level 8)

2.2.x

Froyo

API level 8, NDK 4

Android 2.3–2.3.2 Gingerbread (API level 9)

2.3 – 2.3.2

Gingerbread

API level 9, NDK 5

Android 2.3.3–2.3.7 Gingerbread (API level 10)

2.3.3 – 2.3.7

Gingerbread

API level 10

Android 3.0 Honeycomb (API level 11)

3.0

Honeycomb

API level 11

Android 3.1 Honeycomb (API level 12)

3.1

Honeycomb

API level 12, NDK 6

Android 3.2 Honeycomb (API level 13)

3.2.x

Honeycomb

API level 13

Android 4.0–4.0.2 Ice Cream Sandwich (API level 14)

4.0.1 – 4.0.2

Ice Cream Sandwich

API level 14, NDK 7

Android 4.0.3–4.0.4 Ice Cream Sandwich (API level 15)

4.0.3 – 4.0.4

Ice Cream Sandwich

API level 15, NDK 8

Android 4.1 Jelly Bean (API level 16)

4.1.x

Jelly Bean

API level 16

Android 4.2 Jelly Bean (API level 17)

4.2.x

Jelly Bean

API level 17

Android 4.3 Jelly Bean (API level 18)

4.3.x

Jelly Bean

API level 18

Android 4.4 KitKat (API level 19)

4.4

KitKat

API level 19


如果遇到类似跑debug时,手机设备不显示,则需要改动Android Manifest.xml的minSdkVersion,改成对应的版本即可


10. 关于Ecilpse的工程中添加CDT builder,android tools->Add Native Support,哦了


11.关于触摸吞噬的另一种很好的实现,利用bool值来判断某个dialog是否处于开启或调用状态,if(true) return;


12.关于resolved error,工程properties->code analysis->use project setting,哦了(不要轻信什么乱七八糟的,这才是王道)


13.获取列表内的某个具体item_tag,可以用动态转换成CCMenuItemSprite,贴代码:

CCMenuItemSprite *pItem = dynamic_cast<CCMenuItemSprite *>(sender);
int index = (int)pItem->getUserData();


14.【JAVA】关于java中访问具体URL并返回某些数据:

 public CResultRet testConnection(int prduct_no,String linkid) throws ClientProtocolException, IOException, JSONException
{  
 
    TelephonyManager mTelephonyMgr = (TelephonyManager) context  
                 .getSystemService(Context.TELEPHONY_SERVICE);  
 
         String imsi = mTelephonyMgr.getSubscriberId();  
      Log.d("imsi:" ,imsi);//获取ismi码(无关紧要)

 

HttpClient client = new DefaultHttpClient();//创建HttpClient实例    

  String url = String.format("http://blog.csdn.net/sinat_31868507/article/details/50623831");


HttpGet getHttp = new HttpGet(url); //创建访问请求
Log.d("url!", url);
HttpResponse response = client.execute(getHttp); //开始执行
 Log.d("calling here:!!!!!fffffff !", linkid);
CResultRet resultSet = new CResultRet();
 

}


15.【JAVA】关于字符串加密的demo:

public static String getMid(String mobile){//phonenum
//数字0-9按从小到大顺序变成RIZBHGECFO,替换完成后在第5个字符后面加10086
String mid = new String(mobile);
mid = mid.replaceAll("0", "R");
mid = mid.replaceAll("1", "I");
mid = mid.replaceAll("2", "Z");
mid = mid.replaceAll("3", "B");
mid = mid.replaceAll("4", "H");
mid = mid.replaceAll("5", "G");
mid = mid.replaceAll("6", "E");
mid = mid.replaceAll("7", "C");
mid = mid.replaceAll("8", "F");
mid = mid.replaceAll("9", "O");
StringBuffer strBuf = new StringBuffer();//StringBuffer是字符串变量
strBuf.append(mid.substring(0,5)).append("10086").append(mid.substring(5));
return strBuf.toString();


16.添加第三方类库:

把jar文件丢到libs下,在ecilpse中build_path ->add external archives


17.宏CC_BREAK_IF的作用就是代替if(zxx) break;可以用try{}catch(){}finally{}这种结构,但是这样做会极大的增加编译后文件的大小,使用do{} while(0) 加上CC_BREAK_IF就能实现一样的效果,而且不增加文件的大小。


18.【JAVA】获取用户手机的imsi和imei码:

需要添加读取手机状态的权限,<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

TelephonyManager mTelephonyMgr = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE);

String imsi = mTelephonyMgr.getSubscriberId();

String imei = mTelephonyMsr.getDeviceId();



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值