GVKun编程网logo

android(Java / XML)代码中的注释会影响APK的大小吗?(java注释乱码怎么办?)

6

在本文中,您将会了解到关于android(Java/XML)代码中的注释会影响APK的大小吗?的新资讯,同时我们还将为您解释java注释乱码怎么办?的相关在本文中,我们将带你探索android(Jav

在本文中,您将会了解到关于android(Java / XML)代码中的注释会影响APK的大小吗?的新资讯,同时我们还将为您解释java注释乱码怎么办?的相关在本文中,我们将带你探索android(Java / XML)代码中的注释会影响APK的大小吗?的奥秘,分析java注释乱码怎么办?的特点,并给出一些关于Android 8.0安装apk的实例代码、android Apk打包过程概述_android是如何打包apk的、Android color(颜色) 在XML文件和java代码中的代码详细介绍、Android DevArt2:Android 5.0下 Dialog&AlertDialog 并不会影响Activity的生命周期的实用技巧。

本文目录一览:

android(Java / XML)代码中的注释会影响APK的大小吗?(java注释乱码怎么办?)

android(Java / XML)代码中的注释会影响APK的大小吗?(java注释乱码怎么办?)

参见英文答案 > What happens to comments after the java files are compiled in Android?                                    2个
我只是想知道android(Java / XML)代码中的注释是否会影响APK的大小?

例:-

/*ActionBar actionBar = getSupportActionBar();
    actionBar.setdisplayHomeAsUpEnabled(true);*/

解决方法:

编辑后的代码不包含在已编译的颂歌中.

Android 8.0安装apk的实例代码

Android 8.0安装apk的实例代码

android 8.0安装apk需要请求未知来源权限

//xml配置
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
/**
 * 检测版本8.0
 */
public void checkOreo() {
  if (SdkVersionUtils.hasOreo()) {//8.0
    //判断是否可以直接安装
    boolean canInstall = getPackageManager().canRequestPackageInstalls();
    if (canInstall) {
      //rxpermissions请求权限
      mRxPermissions
          .request(Manifest.permission.REQUEST_INSTALL_PACKAGES)
          .subscribe(granted -> {
            if (granted) {
              //安装apk
              installApk();
            } else if (shouldShowRequestPermissionRationale(Manifest.permission.REQUEST_INSTALL_PACKAGES)) {
               //引导用户去打开权限
              Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNowN_APP_SOURCES);
              startActivityForResult(intent,GET_UNKNowN_APP_SOURCES);
            } else {
              Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNowN_APP_SOURCES);
              startActivityForResult(intent,GET_UNKNowN_APP_SOURCES);
            }
          });
    } else {
      //安装apk
      installApk();
    }
  } else {
    //安装apk
    installApk()
  }
}
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
  super.onActivityResult(requestCode,resultCode,data);
  switch (requestCode) {
    case GET_UNKNowN_APP_SOURCES:
      checkOreo();
      break;
  }
}

总结

以上所述是小编给大家介绍的Android 8.0安装apk的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

您可能感兴趣的文章:

  • Android studio 下的APK打包失败问题解决办法
  • Android安装apk文件并适配Android 7.0详解
  • Android 如何修改APK的默认名称
  • Gradle编译打包Android apk详细介绍
  • Android 使用jarsigner给apk签名的方法详细介绍
  • Android Apk去掉签名以及重新签名的方法
  • Android通过aapt命令获取apk详细信息(包括:文件包名,SDK等信息)

android Apk打包过程概述_android是如何打包apk的

android Apk打包过程概述_android是如何打包apk的


流程概述:
1、打包资源文件,生成R.java文件
2、处理aidl文件,生成相应java 文件
3、编译工程源代码,生成相应class 文件
4、转换所有class文件,生成classes.dex文件
5、打包生成apk
6、对apk文件进行签名
7、对签名后的apk文件进行对其处理


打包过程使用的工具
名称
    功能介绍    在操作系统中的路径    源码路径
aapt
(Android Asset Package Tool)
    
Android资源打包工具
    
${ANDROID_SDK_HOME} /build-tools/
 ANDROID_VERSION/aapt
    
frameworks\base\tools\aap
aidl
(android interface definition language)
    

Android接口描述语言,

将aidl转化为.java文件的工具
    
${ANDROID_SDK_HOME}/build-tools/
 ANDROID_VERSION/aidl
    
frameworks\base\tools\aidl
javac    Java Compiler    

${JDK_HOME}/java

c或/usr/bin/javac
    

dex    
转化.class文件为Davik VM
能识别的.dex文件
    
${ANDROID_SDK_HOME}/build-tools/
 ANDROID_VERSION/dx
    

apkbuilder    
生成apk包
    
${ANDROID_SDK_HOME}/tools/
 apkbuilder
    
sdk\sdkmanager\libs\sdklib\
 src\com\android\sdklib\build\
 ApkBuilderMain.java
jarsigner    .jar文件的签名工具    ${JDK_HOME}/jarsigner或/usr/bin/jarsigner    

zipalign    字节码对齐工具    

${ANDROID_SDK_HOME}/tools

 /zipalign
    


第一步:打包资源文件,生成R.java文件。
【输入】Resource文件(就是工程中res中的文件)、Assets文件(相当于另外一种资源,这种资源Android系统并不像对res中的文件那样优化它)、AndroidManifest.xml文件(包名就是从这里读取的,因为生成R.java文件需要包名)、Android基础类库(Android.jar文件)
【工具】aapt工具
【输出】打包好的资源(bin目录中的resources.ap_文件)、R.java文件(gen目录中)
打包资源的工具aapt,大部分文本格式的XML资源文件会被编译成二进制格式的XML资源文件,除了assets和res/raw资源被原装不动地打包进APK之外,其它的资源都会被编译或者处理。 。
生成过程主要是调用了aapt源码目录下的Resource.cpp文件中的buildResource()函数,该函数首先检查AndroidManifest.xml的合法性,然后对res目录下的资源子目录进行处理,处理的函数为makeFileResource(),处理的内容包括资源文件名的合法性检查,向资源表table添加条目等,处理完后调用compileResourceFile()函数编译res与asserts目录下的资源并生成resources.arsc文件,compileResourceFile()函数位于aapt源码目录的ResourceTable.cpp文件中,该函数最后会调用parseAndAddEntry()函数生成R.java文件,完成资源编译后,接下来调用compileXmlfile()函数对res目录的子目录下的xml文件分别进行编译,这样处理过的xml文件就简单的被“加密”了,最后将所有的资源与编译生成的resorces.arsc文件以及“加密”过的AndroidManifest.xml文件打包压缩成resources.ap_文件(使用Ant工具命令行编译则会生成与build.xml中“project name”指定的属性同名的ap_文件)。
关于这一步更详细的流程可阅读http://blog.csdn.net/luoshengyang/article/details/8744683

第二步:处理aidl文件,生成相应的java文件。
【输入】源码文件、aidl文件、framework.aidl文件
【工具】aidl工具
【输出】对应的.java文件
对于没有使用到aidl的android工程,这一步可以跳过。aidl工具解析接口定义文件并生成相应的java代码供程序调用。

第三步:编译工程源代码,生成下相应的class文件。
【输入】源码文件(包括R.java和AIDL生成的.java文件)、库文件(.jar文件)
【工具】javac工具
【输出】.class文件
这一步调用了javac编译工程src目录下所有的java源文件,生成的class文件位于工程的bin\classes目录下,上图假定编译工程源代码时程序是基于android SDK开发的,实际开发过程中,也有可能会使用android NDK来编译native代码,因此,如果可能的话,这一步还需要使用android NDK编译C/C++代码,当然,编译C/C++代码的步骤也可以提前到第一步或第二步。

第四步:转换所有的class文件,生成classes.dex文件。
【输入】 .class文件(包括Aidl生成.class文件,R生成的.class文件,源文件生成的.class文件),库文件(.jar文件)
【工具】javac工具
【输出】.dex文件
前面多次提到,android系统dalvik虚拟机的可执行文件为dex格式,程序运行所需的classes.dex文件就是在这一步生成的,使用的工具为dx,dx工具主要的工作是将java字节码转换为dalvik字节码、压缩常量池、消除冗余信息等。

第五步:打包生成apk。
【输入】打包后的资源文件、打包后类文件(.dex文件)、libs文件(包括.so文件,当然很多工程都没有这样的文件,如果你不使用C/C++开发的话)
【工具】apkbuilder工具
【输出】未签名的.apk文件
打包工具为apkbuilder,apkbuilder为一个脚本文件,实际调用的是android-sdk\tools\lib\sdklib.jar文件中的com.android.sdklib.build.ApkBuilderMain类。它的代码实现位于android系统源码的sdk\sdkmanager\libs\sdklib\src\com\android\sdklib\build\ApkBuilderMain.java文件,代码构建了一个ApkBuilder类,然后以包含resources.arsc的文件为基础生成apk文件,这个文件一般为ap_结尾,接着调用addSourceFolder()函数添加工程资源,addSourceFolder()会调用processFileForResource()函数往apk文件中添加资源,处理的内容包括res目录与asserts目录中的文件,添加完资源后调用addResourceFromJar()函数往apk文件中写入依赖库,接着调用addNativeLibraries()函数添加工程libs目录下的Native库(通过android NDK编译生成的so或bin文件),最后调用sealApk()关闭apk文件。

第六步:对apk文件进行签名。
【输入】未签名的.apk文件
【工具】jarsigner
【输出】签名的.apk文件
android的应用程序需要签名才能在android设备上安装,签名apk文件有两种情况:一种是在调试程序时进行签名,使用eclipse开发android程序时,在编译调试程序时会自己使用一个debug.keystore对apk进行签名;另一种是打包发布时对程序进行签名,这种情况下需要提供一个符合android开发文档中要求的签名文件。签名的方法也分两种:一种是使用jdk中提供的jarsigner工具签名;另一种是使用android源码中提供的signapk工具,它的代码位于android系统源码build\tools\signapk目录下。

第七步:对签名后的apk文件进行对齐处理。
【输入】签名后的.apk文件
【工具】zipalign工具
【输出】对齐后的.apk文件
这一步需要使用的工具为zipalign,它位于android-sdk\tools目录,源码位于android系统源码的build\tools\zipalign目录,它的主要工作是将spk包进行对齐处理,使spk包中的所有资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时速度会更快,验证apk文件是否对齐过的工作由ZipAlign.cpp文件的verify()函数完成,处理对齐的工作则由process()函数完成。

以一个具体项目中包含的具体文件为例作图如下:
      


关于Android打包apk过程中的细节以及打包后如何获取资源、查找资源、使用资源,移步老罗的博客,十分详细。
0. Android资源管理框架简要介绍和学习计划
1. 应用程序资源的编译和打包过程;
2. 应用程序资源的初始化过程;
3. 应用程序资源的查找过程。

https://blog.csdn.net/jason0539/article/details/44917745

Android color(颜色) 在XML文件和java代码中的代码详细介绍

Android color(颜色) 在XML文件和java代码中的代码详细介绍

android color(颜色) 在xml文件和java代码中,有需要的朋友可以参考下。

1、使用Color类的常量,如:

int color = Color.BLUE;//创建一个蓝色 是使用Android提供的颜色
int color = Color.RED; int color = Color.WHITE;
登录后复制

2、通过ARGB构建,如:

int color = Color.argb(127, 255, 0, 255);
//半透明的紫色其中第一个参数表示透明,0表示完全透明,255(ff)表示完全不透明;后三位分别代表RGB的值了。
登录后复制

3、使用XML资源文件来定义颜色
该方法扩展性好,便于修改和共享,如在values目录下创建一个color.xml:

<?xml version=”1.0” encoding=”utf-8”>
<resources>
<color name=”mycolor”>#7fff00ff</color>
</resources>
登录后复制

定义了一个名为mycolor的颜色,在别的地方就可以通过引用mycolor来获取该颜色值,如

立即学习“Java免费学习笔记(深入)”;

textView定义中:

Android:textColor="@drawable/mycolor"
登录后复制

Java代码中可以使用ResourceManager类中的getColor来获取该颜色:

int color = getResources().getColor(R.color.mycolor);
登录后复制

这与第二种方法得到的值是一样的,getResources()方法返回当前活动Activity的ResourceManager类实例。

说明:XML定义方法接受6位和8位两种表示法,而且开头必须是#,8位定义时前两位表示透明。(对于简单,也可以缩写形式),例如:

<color name="solid_red">#f00</color>
<color name="solid_blue">#0000ff</color><color name="solid_green">#f0f0</color>
<color name="solid_yellow">#ffffff00</color>
登录后复制

4、直接定义色值,如:

int color = 0xff00ff00;
登录后复制

这种方法必须使用0x开头,而不是用我们常用的#。与方法3不一样,值也必须用8位表示,不接受6位的颜色表示。分组一下0x|ff|ff00ff,0x是代表颜色整数的标记,ff是表示透明度,ff00ff表示RGB颜色值。

以上就是Android color(颜色) 在XML文件和java代码中的代码详细介绍的详细内容,更多请关注php中文网其它相关文章!

Android DevArt2:Android 5.0下 Dialog&AlertDialog 并不会影响Activity的生命周期

Android DevArt2:Android 5.0下 Dialog&AlertDialog 并不会影响Activity的生命周期

先给出结论:Dialog和AlertDialog并不会影响到Activity的生命周期,但会影响到Activity的优先级。

核心代码:

onCreated中:
        Resources resources = this.getResources();
        DisplayMetrics displayMetrics = resources.getDisplayMetrics();
        final int widthPixels = displayMetrics.widthPixels / 2;
        final int heightPixels = displayMetrics.heightPixels / 2;
        //1
        //Android 5.0下 Dialog&AlertDialog 并不会影响Activity的生命周期
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
//                        .setAction("Action", null).show();
                //test Dialog
//                EditText editText = new EditText(ScrollingActivity.this);
//                editText.setLayoutParams(new ViewGroup.LayoutParams(widthPixels, heightPixels));
//                Dialog dialog = new Dialog(ScrollingActivity.this);
//                dialog.setContentView(editText);
//                dialog.setTitle("标题");
//                dialog.setCanceledOnTouchOutside(false);
//                dialog.show();
                //test Dialog
                AlertDialog.Builder builder = new AlertDialog.Builder(ScrollingActivity.this);
                builder.setTitle("弹窗")
                        .setMessage("Msg")
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        }).setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        ;
                    }
                }).setCancelable(false);
                builder.create().show();
            }
        });

In Activity:
 @Override
    protected void onStart() {
        super.onStart();
        System.out.println("ScrollingActivity.onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("ScrollingActivity.onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("ScrollingActivity.onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("ScrollingActivity.onStop");
    }

有兴趣的同志可以新建个Activity体验一下。

关于android(Java / XML)代码中的注释会影响APK的大小吗?java注释乱码怎么办?的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android 8.0安装apk的实例代码、android Apk打包过程概述_android是如何打包apk的、Android color(颜色) 在XML文件和java代码中的代码详细介绍、Android DevArt2:Android 5.0下 Dialog&AlertDialog 并不会影响Activity的生命周期的相关信息,请在本站寻找。

本文标签: