精华内容
参与话题
问答
  • Android代码命名规范

    千次阅读 2019-08-19 10:47:24
    1、为什么 规范 Android 代码命名? 增强代码的可读性 增强代码的可维护性 正由于上述两个作用,从而使得 开发效率 & 维护效率 得到大幅度的提高。 2、Android需要命名的代码(对象)有哪些? 3、具体命名...

    目录

    在这里插入图片描述

    1、为什么 规范 Android 代码命名?

    • 增强代码的可读性
    • 增强代码的可维护性

    正由于上述两个作用,从而使得 开发效率 & 维护效率 得到大幅度的提高。

    2、Android需要命名的代码(对象)有哪些?

    在这里插入图片描述

    3、具体命名规范

    下面,我将对 Android 代码对象中的命名规范进行详细讲解

    注:由于 Android 主要用 Java 实现,所以Android规范会涵盖部分Java规范

    3.1、包

    基础规则:小写、单词间连续无间隔、反域名法(分为4级,具体如下图)

    说明
    模板 : com.x.y.z
    com = 1级包名 = 固定com
    x = 2级包名 = 公司/个人
    y = 3级包名 = 应用名
    z = 4级包名 = 功能模块名
    示例
    com.davis.wechat.login

    第4级包名会随着功能的不同而不同。下面我列举出一些常见 & 需要规范的4级功能包名:

    常见 & 规范的 第四级包名
    (基础规则:小写、单词间连续无间隔、反域名法)
    功能模块 命名规则 功能模块 命名规则
    Activity com.x.y.activity 基础共享 com.x.y.base
    Service服务 com.x.y.service Adapter类(适配器) com.x.y.adapter
    广播服务 com.x.y.receiver 数据库操作 com.x.y.db
    模型类 com.x.y.model 公共工具方法 com.x.y.util
    自定义View com.x.y.view JavaBean com.x.y.bean

    3.2、类

    在这里插入图片描述

    3.3、变量

    基础规则:

    • 类型 = 名词 / 名词短语;
    • 形式 = 驼峰形式中的 小骆驼拼写法(LowerCamelCase)。

    即名称中的第1个词的首字母小写,后面每个词的首字母大写,如androidStudioTool

    在具体命名变量时,会根据该变量的类型不同而 附加额外的命名规则。具体如下图:
    在这里插入图片描述

    3.4、方法

    基础规则:

    • 类型 = 动词 / 动词短语;
    • 形式 = 驼峰形式中的 小骆驼拼写法(LowerCamelCase)。

    即名称中的第1个词的首字母小写,后面每个词的首字母大写,如androidStudioTool

    在具体命名 方法名时,会根据该方法名的作用不同而 附加额外的命名规则。具体如下图:
    在这里插入图片描述

    3.5、参数名

    基础规则:

    • 驼峰形式中的小骆驼拼写法(LowerCamelCase)

    即名称中的第1个词的首字母小写,后面每个词的首字母大写,如androidStudioTool

    附加命名规则: 功能名,如userName

    3.6、资源

    Android的资源包括:
    在这里插入图片描述
    在这里插入图片描述
    下面,我将对每种Android资源的命名规则进行详细讲解:

    3.6.1、布局文件资源

    在这里插入图片描述在这里插入图片描述

    3.6.2、图片资源

    在这里插入图片描述

    3.6.3、参数值资源

    在这里插入图片描述

    3.6.4、动画资源

    在这里插入图片描述

    3.7、额外

    除了上述的命名规范以外,Android 中还有一些全局通用的命名规范:
    在这里插入图片描述

    4、附录:常见使用单词缩写表

    使用单词缩写的原则:只使用约定俗成的单词缩写

    严禁自由缩写单词

    具体如下图:
    在这里插入图片描述


    展开全文
  • Android 代码混淆

    千次阅读 2020-09-09 16:19:12
    Android 代码混淆 简介 在我们日常开发中,对已经开发完成的源代码,需做一些代码混淆工作,以对代码起到一种保护和降低安装包体积的作用。 开启混淆 在app的build.gradle文件中如下代码android { ...... ...

    Android 代码混淆

    简介
    在我们日常开发中,对已经开发完成的源代码,需做一些代码混淆工作,以对代码起到一种保护和降低安装包体积的作用。

    开启混淆
    在app的build.gradle文件中如下代码:

    android {
        ......
        buildTypes {
            release {
                //开启代码混淆
                minifyEnabled true
                //开启资源混淆,移除未使用的资源
                shrinkResources true
                //proguard-android-optimize.txt:SDK提供的默认混淆文件
                //proguard-rules.pro:自定义混淆文件
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }
    

    配置混淆文件
    在app的proguard-rules.pro文件中编写混淆代码即可
    在这里插入图片描述
    在这里插入图片描述

    混淆语法

    命令 作用
    -keep 防止类和成员被移除或者被重命名
    -keepnames 防止类和成员被重命名
    -keepclassmembers 防止成员被移除或者被重命名
    -keepclassmembersname 防止成员被重命名
    -keepclasseswithmembers 防止拥有该成员的类和成员被移除或者被重命名
    -keepclasseswithmembernames 防止拥有该成员的类和成员被重命名
    类通配符 * 匹配任意长度字符,但不含包名分隔符(.)
    类通配符 ** 匹配任意长度字符,并且包含包名分隔符(.)
    类extends 即可以指定类的基类
    类implements 匹配实现了某接口的类
    类$ 内部类
    成员(方法)通配符 * 匹配任意长度字符,但不含包名分隔符(.)
    成员(方法)通配符 ** 匹配任意长度字符,并且包含包名分隔符(.)
    成员(方法)通配符 *** 匹配任意参数类型
    成员(方法)通配符 … 匹配任意长度的任意类型参数
    成员(方法)通配符 <> 匹配方法名,eg.

    常用基本混淆

    #############################################
    #
    # 基本指令区域(没什么别的需求不需要动)
    #
    #############################################
    # 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
    -optimizationpasses 5
    
    # 混合时不使用大小写混合,混合后的类名为小写
    -dontusemixedcaseclassnames
    
    # 指定不去忽略非公共库的类
    -dontskipnonpubliclibraryclasses
    
    # 这句话能够使我们的项目混淆后产生映射文件
    # 包含有类名->混淆后类名的映射关系
    -verbose
    
    # 指定不去忽略非公共库的类成员
    -dontskipnonpubliclibraryclassmembers
    
    # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
    -dontpreverify
    
    # 保留Annotation不混淆
    -keepattributes *Annotation*,InnerClasses
    
    # 避免混淆泛型
    -keepattributes Signature
    
    # 抛出异常时保留代码行号
    -keepattributes SourceFile,LineNumberTable
    
    # 指定混淆是采用的算法,后面的参数是一个过滤器
    # 这个过滤器是谷歌推荐的算法,一般不做更改
    -optimizations !code/simplification/cast,!field/*,!class/merging/*
    
    
    #############################################
    #
    # Android开发中一些需要保留的公共部分(没什么别的需求不需要动)
    #
    #############################################
    
    # 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
    # 因为这些子类都有可能被外部调用
    -keep public class * extends android.app.Activity
    -keep public class * extends android.app.Appliction
    -keep public class * extends android.app.Service
    -keep public class * extends android.content.BroadcastReceiver
    -keep public class * extends android.content.ContentProvider
    -keep public class * extends android.app.backup.BackupAgentHelper
    -keep public class * extends android.preference.Preference
    -keep public class * extends android.view.View
    -keep public class com.android.vending.licensing.ILicensingService
    
    
    # 保留support下的所有类及其内部类
    -keep class android.support.** {*;}
    
    # 保留继承的
    -keep public class * extends android.support.v4.**
    -keep public class * extends android.support.v7.**
    -keep public class * extends android.support.annotation.**
    
    # 保留R下面的资源
    -keep class **.R$* {*;}
    
    # 保留本地native方法不被混淆
    -keepclasseswithmembernames class * {
        native <methods>;
    }
    
    # 保留在Activity中的方法参数是view的方法,
    # 这样以来我们在layout中写的onClick就不会被影响
    -keepclassmembers class * extends android.app.Activity{
        public void *(android.view.View);
    }
    
    # 保留枚举类不被混淆
    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
    
    # 保留我们自定义控件(继承自View)不被混淆
    -keep public class * extends android.view.View{
        *** get*();
        void set*(***);
        public <init>(android.content.Context);
        public <init>(android.content.Context, android.util.AttributeSet);
        public <init>(android.content.Context, android.util.AttributeSet, int);
    }
    
    # 保留Parcelable序列化类不被混淆
    -keep class * implements android.os.Parcelable {
        public static final android.os.Parcelable$Creator *;
    }
    
    # 保留Serializable序列化的类不被混淆
    -keepclassmembers class * implements java.io.Serializable {
        static final long serialVersionUID;
        private static final java.io.ObjectStreamField[] serialPersistentFields;
        !static !transient <fields>;
        !private <fields>;
        !private <methods>;
        private void writeObject(java.io.ObjectOutputStream);
        private void readObject(java.io.ObjectInputStream);
        java.lang.Object writeReplace();
        java.lang.Object readResolve();
    }
    
    # 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
    -keepclassmembers class * {
        void *(**On*Event);
        void *(**On*Listener);
    }
    
    # WebView处理,项目中没有使用到webView忽略即可
    -keepclassmembers class fqcn.of.javascript.interface.for.webview {
        public *;
    }
    -keepclassmembers class * extends android.webkit.webViewClient {
        public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
        public boolean *(android.webkit.WebView, java.lang.String);
    }
    -keepclassmembers class * extends android.webkit.webViewClient {
        public void *(android.webkit.webView, jav.lang.String);
    }
    
    #-----------处理实体类---------------
    # 在开发的时候我们可以将所有的实体类放在一个包内,这样我们写一次混淆就行了。
    -keep class com.zzs.wanandroidmvvm.model.bean.** { *; }
    

    常见第三方混淆

    ButterKnife

    # ButterKnife
    -keep class butterknife.** { *; }
    -dontwarn butterknife.internal.**
    -keep class **$$ViewBinder { *; }
    -keepclasseswithmembernames class * {
        @butterknife.* <fields>;
    }
    -keepclasseswithmembernames class * {
        @butterknife.* <methods>;
    }
    

    EventBus

    # EventBus
    -keepattributes *Annotation*
    -keepclassmembers class ** {
        @org.greenrobot.eventbus.Subscribe <methods>;
    }
    -keep enum org.greenrobot.eventbus.ThreadMode { *; }
    

    OkHttp3

    # OkHttp3
    -dontwarn com.squareup.okhttp3.**
    -keep class com.squareup.okhttp3.** { *;}
    -dontwarn okio.**
    

    Retrofit

    # Retrofit
    -dontwarn retrofit2.**
    -keep class retrofit2.** { *; }
    -keepattributes Signature
    -keepattributes Exceptions
    

    RxJava RxAndroid

    # RxJava RxAndroid
    -dontwarn sun.misc.**
    -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
        long producerIndex;
        long consumerIndex;
    }
    -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
        rx.internal.util.atomic.LinkedQueueNode producerNode;
    }
    -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
        rx.internal.util.atomic.LinkedQueueNode consumerNode;
    }
    

    Glide

    # Glide
    -keep public class * implements com.bumptech.glide.module.GlideModule
    -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
      **[] $VALUES;
      public *;
    }
    

    Gson

    # Gson
    -keepattributes Signature
    -keepattributes *Annotation*
    -dontwarn sun.misc.**
    -keep class com.google.gson.examples.android.model.** { <fields>; }
    -keep class * implements com.google.gson.TypeAdapterFactory
    -keep class * implements com.google.gson.JsonSerializer
    -keep class * implements com.google.gson.JsonDeserializer
    -keepclassmembers,allowobfuscation class * {
      @com.google.gson.annotations.SerializedName <fields>;
    }
    

    GreenDao

    # GreenDao
    -keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
        public static java.lang.String TABLENAME;
    }
    -keep class **$Properties { *; }
    

    不混淆第三方库(包括jar、aar、依赖)

    -keep class 第三方库包名.** { *;}
    如:
    -keep class com.baidu.map.** { *;}
    
    展开全文
  • Android:这是一份全面 & 详细的Android代码命名规范

    千次阅读 多人点赞 2019-03-25 09:18:56
    Android代码规范内容非常多,但对我们最有用& 最有影响的莫过于 Android代码的命名规范 可是,有很多人容易忽略Android代码的命名规范,从而导致代码的可读性 & 维护性非常差,最终导致开发效率 & ...

    前言

    • Android代码规范内容非常多,但对我们最有用& 最有影响的莫过于 Android代码的命名规范

    • 可是,有很多人容易忽略Android代码的命名规范,从而导致代码的可读性 & 维护性非常差,最终导致开发效率 & 维护效率降低

    • 今天,我将根据 Google Java 编程规范 & Google 官方 Android 编码规范,为大家带来一份全面 & 清晰的Android代码命名规范,希望你们会喜欢。

    • ps:最近在筹备一个”和我一起写Android“的活动,需要各大读者的帮忙,希望能看文章参与哦:我想邀请您和我一起写Android(福利回赠)


    目录

    示意图


    1. 为什么 规范 Android 代码命名?

    • 增强代码的可读性
    • 增强代码的可维护性

    正由于上述两个作用,从而使得 开发效率 & 维护效率 得到大幅度的提高。


    2. Android需要命名的代码(对象)有哪些?

    示意图


    3. 具体命名规范

    下面,我将对 Android 代码对象中的命名规范进行详细讲解

    注:由于 Android主要用Java实现,所以Android规范会涵盖部分Java规范

    3.1 包

    • 基础规则:小写、单词间连续无间隔、反域名法(分为4级,具体如下图)

    示意图

    • 第4级包名会随着功能的不同而不同。下面我列举出一些常见 & 需要规范的4级功能包名

    示意图

    3.2 类

    • 基础规则
      1. 类型 = 名词 / 名词短语;
      2. 形式 = 驼峰形式中的 大骆驼拼写法UpperCamelCase

    即名称中的每个词的首字母都大写,如 AndroidStudio

    • 在具体命名类时,会根据 该类的类型不同而附加额外的命名规则。具体如下图

    示意图


    3.3 变量

    • 基础规则
      1. 类型 = 名词 / 名词短语;
      2. 形式 = 驼峰形式中的 小骆驼拼写法LowerCamelCase

    即名称中的第1个词的首字母小写,后面每个词的首字母大写,如androidStudioTool

    • 在具体命名变量时,会根据该变量的类型不同而 附加额外的命名规则。具体如下图

    示意图

    3.4 方法

    • 基础规则
      1. 类型 = 动词 / 动词短语;
      2. 形式 = 驼峰形式中的 小骆驼拼写法LowerCamelCase

    即名称中的第1个词的首字母小写,后面每个词的首字母大写,如androidStudioTool

    • 在具体命名 方法名时,会根据 该方法名的作用不同而 附加额外的命名规则。具体如下图

    示意图

    3.5 参数名

    • 基础规则:驼峰形式中的 小骆驼拼写法LowerCamelCase

    即名称中的第1个词的首字母小写,后面每个词的首字母大写,如androidStudioTool

    • 附加命名规则:功能名,如userName

    3.6 资源

    • Android的资源包括:

    示意图

    示意图

    下面,我将对每种Android资源的命名规则进行详细讲解

    3.6.1 布局文件资源

    示意图

    3.6.2 图片资源

    示意图

    3.6.3 参数值资源

    示意图

    3.6.4 动画资源

    示意图


    3.7 额外

    除了上述的命名规范以外,Android 中还有一些全局通用的命名规范:

    示意图

    至此,关于Android的代码命名规范讲解完毕


    4. 附录:常见使用单词缩写表

    • 使用单词缩写的原则:只使用约定俗成的单词缩写

    严禁自由缩写单词

    • 具体如下图

    示意图


    5. 总结

    • 看完本文后,相信你以后会认真对待 Android代码命名了!

    • 下面我将继续对 Android中的其他代码规范 进行深入讲解 ,感兴趣的同学可以继续关注carson_ho的微信公众号
      示意图
      示意图


    请帮顶 / 点赞!因为你的鼓励是我写作的最大动力!

    展开全文
  • android 代码重启app

    千次阅读 2019-06-21 08:58:41
    android 代码重启app方法完事 方法 /** * 重启app * @param context */ public static void restartApp(Context context) { PackageManager packageManager = context.getPackageManager(); ...

    android 代码重启app

    方法

        /**
         * 重启app
         * @param context
         */
        public static void restartApp(Context context) {
            PackageManager packageManager = context.getPackageManager();
            if (null == packageManager) {
                LogUtils.errorLog("null == packageManager");
                return;
            }
            final Intent intent = packageManager.getLaunchIntentForPackage(context.getPackageName());
            if (intent != null) {
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                context.startActivity(intent);
            }
        }
    

    完事

    展开全文
  • 通常我们可以使用Android studio自带的terminal工具运行先adb shell 命令来进行这样不好的就是我们可能有的操作就要每次设备重启的时候都要手动的敲一遍这样的代码,十分麻烦。那么怎么才能
  • Android 代码 空格处理

    千次阅读 2019-03-12 11:06:35
    &amp;#32; == 普通的英文半角空格 &amp;#160; == &amp;nbsp; == &amp;#xA0; == no-break space (普通的英文半角空格但不换行) &amp;#12288; == 中文全角空格 (一个中文宽度) ......
  • 使用AndroidStudio测试java代码和Android代码一。测试java代码,在app/src/test目录下编写java类和java方法,然后右击运行该类即可。需要注意的是不同以前的java主方法main(String[]args),我们只需要在需要执行的...
  • Android代码混淆规范总结

    千次阅读 2019-02-21 08:46:09
    代码混淆 概念 proguard工具用于压缩,优化,混淆代码。主要作用是移除代码中的无用类,字段,方法和属性,同时可以进行代码混淆 原因 保护源代码,阻止反向工程。 反向工程会带来许多问题,诸如知识产权泄露,程序...
  • 通过不到100行代码,模仿css3的flexbox功能,实现一个Android的流式布局。同时介绍了如何把打出来的aar包upload到jCenter。
  • Android 代码模拟物理按键

    千次阅读 2018-10-15 17:54:08
    开发中有遇到这样的情况,物理按键个数有限, 想用代码模拟其他物理按键输入,这里用了shell 命令在程序运行时环境里模拟按键事件。 因命令执行会阻塞线程, 所以最好是在子线程里执行命令: new Thread(){ @...
  • 最近 Android Studio 稳定版迎来了3.3版本更新,带来的新特性之一是新一代的代码压缩工具 R8,本文将详细介绍这一新工具 R8。阅读本文内容前需了解: Android 中使用 Proguard 缩减代码 关于 R8 作为 Android ...
  • android代码动态添加View

    千次阅读 2018-11-23 13:38:20
    @Override protected void onCreate(Bundle savedInstanceState) { ... //Java代码中动态的生成View //首先我们在onCreate方法中创建一个Button实例: Button button = new Button(this);...
  • Android 代码实现屏幕截图功能

    千次阅读 2017-02-08 17:10:21
    private void screenshot() { // 获取屏幕 View dView = getWindow().getDecorView(); dView.setDrawingCacheEnabled(true); dView.buildDrawingCache(); Bitmap bmp = dView.getDrawingCache();
  • 第一章 开始启程,你的第一行Android代码1.1.Android简介 1.1.1.Android系统架构 自下而上:Linux内核层(为硬件提供底层驱动。eg:显示驱动、音频驱动等)、系统运行时层(C/C++库和android运行时库,前者有Sqlite...
  • 2.打开从github上下载下来的代码,替换Gradle文件 红框标注的文件全部替换为步骤1中新建project中的相应文件 3.导入project到Android Studio File-&gt;new-&gt;import project 4.修改SDK版本信息 ...
  • Android 代码设置Color的几种方式

    千次阅读 2018-12-08 14:38:51
    tx.setTextColor(android.graphics.Color.RED); 利用数字设置 tx.setTextColor(0xffff00f); 利用xml中已经定义好的颜色代码 tx.setTextColor(getResources().getColor(R.color.red)); 利用16进制 字符串 tx....
  • Android 代码设置启动模式

    千次阅读 2018-01-09 21:36:36
    今天一个朋友问道了这个问题,从A activity启动一个B activity,B启动一个C,C启动一个D,A、B、C、D四个都是默认的启动模式。现象需要D直接回到A activity,但是不能重新创建一个新的Activity。...
  • android 代码卸载和安装应用

    千次阅读 2018-04-26 12:03:45
    1.安装应用//下载应用到自己的手机上,本例将安装包放在asset上,直接读取写入手机的存储卡路径中清单文件声明权限//android8.0需要install_packages权限,清单文件注册即可,无需动态申请权限 &lt;uses-...
  • Android代码中运行shell命令

    千次阅读 2018-03-14 16:38:33
    * Android shell 命令执行器,支持无限个命令串型执行(需要有root权限!!) * &lt;p&gt; * &lt;p&gt; * HOW TO USE? * Example:修改开机启动动画。把/sdcard/Download目录下的bootanimation....
  • android 代码设置EditText的hint字符

    万次阅读 2018-03-14 08:46:12
    今天,简单讲讲android里如何在代码里设置  EditText的hint字符。 之前,我一般是直接在xml文件设置EditText 的hint字符,后来需要在代码里修改hint字符,发现自己居然不知道怎么实现,在网上搜索...
  • Android代码混淆指南

    万次阅读 2015-02-18 14:52:12
    本文将和大家分享使用Eclipse+ADT与使用Android Studio进行代码混淆打包的方法。 使用Eclipse+ADT进行代码混淆打包的方法 新版本SDK下进行打包混淆  如果使用新版本的SDK创建的Android项目会在项目的根目录下生成...
  • Android 代码中动态修改shape的颜色

    千次阅读 2018-11-28 16:18:32
    代码中动态设置shape的颜色其实挺简单,android为我们是提供了方法的,只是以前没有遇到这样的需求,所以也没有用过,现在记录一下以免忘记! 1、首先,布局文件是这样的 &amp;amp;amp;amp;amp;lt;View android...
  • android代码执行时间打印

    千次阅读 2017-08-26 09:03:44
    android开发过程中,会遇到一下性能问题影响客户体验,为了解决这个问题需要如下步骤: 1:首先定位代码,什么地方导致的耗时。 2:分析到耗时代码后,在分析使用什么方法解决耗时问题。例如,是使用异步加载方式...
  • Android代码重构——实战小技巧

    千次阅读 2018-06-29 17:24:12
    在平时开发 Android 工程中,我们如何高效去做重构,重构和开发怎么比较好的有效结合起来。所谓工欲善其事必先利就是这个道理,我们如果需要去做重构优化,首先我们要知道我们做的不好的地方 - 代码的坏味道在哪里,...
  • Android 代码中获取颜色 Color

    万次阅读 2017-07-25 09:24:19
    tv_color.setTextColor(0x123456) // 这个6.0 的已经过时了 resources.getColor(R.color.abc_btn_colored_text_material); // 6.0 以上的 this.getColor(R.color.abc_background_cache_hint_sele
  • Android代码中设置字体颜色的方法

    千次阅读 2018-07-16 16:22:40
    TextView txt=(TextView) findViewById...txt.setTextColor(android.graphics.Color.RED); // 系统自带的颜色类 //第2种: txt.setTextColor(android.graphics.Color.parseColor("#87CEFA")); // 使用Co...
  • Android 代码中修改控件宽高

    千次阅读 2018-05-16 10:08:17
    不要在o nCreate()和onResume()方法中测量控件的宽高,不然得到的数据都是0,可以在onWindowFocusChanged()方法中测量@Override public void onWindowFocusChanged(boolean hasFocus) { super....
  • Android 代码形式安装证书到手机内

    千次阅读 2018-09-18 15:18:10
    #需要 项目要求用户在APP中就可将选中的证书安装到手机内 #一般手动安装步骤 ... ...##3、在安全内选择从SD卡安装,点进进入 ...##5、就会调起安装界面,此时显示页面将与代码中的相同,但是这里别名出...
  • 1.1 了解全貌——Android王国简介 1.1.1 Android 系统架构 1.1.1 Android 已发布版本 1.1.3 Android 应用开发特色 1.2 手把手带你搭建开发环境 1.2.1 准备所需要的工具 1.2.2 搭建开发环境 1.3 创建你的第一...

空空如也

1 2 3 4 5 ... 20
收藏数 248,724
精华内容 99,489
关键字:

android代码