GVKun编程网logo

Android Build Variants 为项目设置变种版本的方法(androidstudio怎么改变项目包名)

18

在本文中,您将会了解到关于AndroidBuildVariants为项目设置变种版本的方法的新资讯,同时我们还将为您解释androidstudio怎么改变项目包名的相关在本文中,我们将带你探索Andr

在本文中,您将会了解到关于Android Build Variants 为项目设置变种版本的方法的新资讯,同时我们还将为您解释androidstudio怎么改变项目包名的相关在本文中,我们将带你探索Android Build Variants 为项目设置变种版本的方法的奥秘,分析androidstudio怎么改变项目包名的特点,并给出一些关于Android Build Variants based on gradle、Android build文件的删除的方法、android build,android通讯录开发实例、Android Error:Unable to find method ''com.android.build.gradle.api.BaseVariant.getOutputs()Lja...的实用技巧。

本文目录一览:

Android Build Variants 为项目设置变种版本的方法(androidstudio怎么改变项目包名)

Android Build Variants 为项目设置变种版本的方法(androidstudio怎么改变项目包名)

前言

在项目开发过程中,时常会碰到这种情况:

1.同一个Project的同一个API,有几个不同的接口,比如内部测试用的Server,和当前版本暴露给用户使用的Server;

2.同一个Project有免费版和收费版

3.同一个Project不同环境下有不同的Constants常量

当然我们可以简单的通过这种方式处理不同情况下的API:

// GET 电影信息
String douban_movie_info = "/v2/movie/test/subject";
//String douban_movie_info = "/v2/movie/production/subject";

或者这种情况:

long waitTime = 10000; //正式版本某个操作,会耗时10秒
//long watTime = 1000; //开发环境我们只想1秒就足够了

在不同的环境下我们通过注释,切换使用对应的API,比如说开发时我们使用内网Server的“test/subject”接口,正式发布版本切换为“production/subject”接口;

同理:

不同的环境下我们通过注释,平时开发打开1000,注释掉10000;版本发布时注释掉1000,打开10000……

但是这种操作太繁琐太麻烦了,我们可以使用big更高一些的方式,比如AndroidStudio为开发人员配置的一个功能:Build Variants(直译:Build 口味)。

1.Module中 Build.Gradle配置:

buildTypes {
 release {
  minifyEnabled true //是否代码混淆
  multiDexEnabled true //防止方法数量超过65536导致错误
 }
 debug {
  minifyEnabled false 
  multiDexEnabled true
 }
}
// If you need to add more flavors,consider using flavor dimensions.
// 构建变种版本
productFlavors { 
 production { //正式发布版本
 }
 dev {   //开发测试版本
 }
}

ok,基本配置结束,我们点击sync同步项目之后,打开AndroidStudio左下角的Build Variants菜单:

我们先不考虑右边的代码,我们看到了我们Module的“productionDebug”按钮,这意味着我们当前的环境是正式发布版本的Debug模式。我们有哪几种模式呢?

所有Build Variant 
- productionDebug //正式版本的debug包 
- productionRelease //正式版本的Release包 
- devDebug //开发版本的debug包 
- devRelease //开发版本的Release包

可以看到,我们拥有的四种变种版本,数量正好是「Build.gradle」文件中「buildTypes」*「productFlavors」的结果,我们便完全可以据此开发出不同的变种版本。

2.Build Variant牛刀小试:

现在我们可以在build.gradle文件中加一些小「佐料」:

productFlavors {
 production {
  manifestPlaceholders = [
    APP_NAME   : "@string/app_name"]
 }
 dev {
  manifestPlaceholders = [
    APP_NAME   : "@string/app_name_dev"]
 }
}

在你的string资源文件中添加:

<resources>
<string name="app_name">LIFE TOOL</string>
<string name="app_name_dev">LT 开发版</string>
</resources>

然后是你的清单文件Manifest.xml添加占位符${APP_NAME}:

<application
android:icon="@mipmap/ic_app_icon"
android:label="${APP_NAME}"//app名称,根据不同变种版本名字也不同
android:supportsRtl="true"
android:theme="@style/AppTheme">

然后我们切换到productionDebug版本,点击运行:

模拟器中,我们获得的App:

然后我们切换到devDebug版本,点击运行:

模拟器中,我们获得的App:

是不是很方便!其实我们仔细点还可以观察到,在我们切换不同变种版本的时候,同时gradle也在进行编译,与其说我们是在切换变种版本,更准确的是我们在切换两种不同版本的代码!

3.Build Variant深入学习:

如果说单单只能改个app名字啥的实际上并没有什么用,我们在工程的对应目录下创建2个不同的文件夹:

如图,我们创建了「production」和「dev」两个文件夹,这两个文件夹什么用呢,在我们切换不同的变种版本时,我们app使用的代码就从对应的文件夹下去找!

比如:

public interface ConstantsApi {
long waitTime = 10000; //正式版本某个操作,会耗时10秒
}
public interface ConstantsApi {
long watTime = 1000; //开发环境我们只想1秒就足够了
}

假如创建两个ConstantsApi文件,显然我们想将第二个「ConstantsApi」文件放入「开发环境」对应的dev版本中使用,我们就可以这样:

创建和src/main同样目录的文件夹(这样最好,不容易乱)

比如我的工程src/main下面结构可能是这样: 
- /MyProject/MyApplication/app/src/main/java/com/mei_husky/lifemanager 
那么src/dev文件夹下的目录结构最好也是: 
- /MyProject/MyApplication/app/src/dev/java/com/mei_husky/lifemanager

这时,我们切换到我们的dev变种版本,打开我们的Android视图,我们可以看到:

同理,我们在同样的方式在production目录下创建同样的文件夹,将另外一个10s的ConstantsApi文件放在该目录下,切换到productionDebug变种,我们又会看到:

我们可以看到,不同变种的文件夹只有我们在切换到该变种时,该文件夹才会显示,比如dev变种只显示dev文件夹不显示production文件夹,当我们切换到production变种时,dev同样消失了。

更神奇的是,我们此时使用这些变量,运行代码,所得的结果也因为版本的不同而不同,我们使用dev变种版本,我们只需要等1s,切换到production版本,我们直接就可以打包发布。

4.总结

这样的好处是很明显的,「首先」我们不管有多少不同环境的配置,我们只需要配置一次,以后想切换到哪种环境,我们只需要切换到该变种就可以了;「其次」,这样的结构非常清晰,等同于我们有N套不同版本的代码,不会代码多了版本多了,人就蒙了。

Android Build Variants based on gradle

Android Build Variants based on gradle

https://developer.android.com/tools/building/plugin-for-gradle.html

Android build文件的删除的方法

Android build文件的删除的方法

本文介绍了Android 删除所有build编译文件,翻译磁盘空间,分享给大家,也给自己留个笔记,具体如下:

 public static void main(String[] args) {
   //传入一个目录。
   deleteFileWithThread("D:\\");

/**
* 这里开了多个线程,提高效率
**/
private static void deleteFileWithThread(String path) {
   File file = new File(path);
   if (file.isDirectory()) {
     File[] files = file.listFiles();
     int length = files.length;
     for (File outFile : files) {
       if (outFile.isDirectory()) {
         File[] filesIn = outFile.listFiles();
         if (filesIn != null) {
           int lengthIn = filesIn.length;
           for (int i = 0; i < lengthIn; i++) {
             int a = i;
             new Thread() {
               @Override
               public void run() {
                 delDir(filesIn[a]);
               }
             }.start();
           }
         }
       }
     }
   }
 }
 }

//采用递归的方式去删除文件夹
public static void delDir(File f) {
   // 判断是否是一个目录,不是的话跳过,直接删除; 如果是一个目录,先将其内容清空.
   if (f.isDirectory()) {
     File[] rootFile = f.listFiles();
     for (File file : rootFile) {
       if (file.isDirectory()) {
         if ("build".equals(file.getName())) { //删除build的文件夹和文件夹中的所有内容
           System.out.println("fileName delete\t" + file.getAbsolutePath() + "\t" + file.getName());
           delete(file);
           file.delete();
         } else {
           delDir(file);

         }
       }
     }
   }
 }

通过以上的代码就能删除Android 工程下面的所有build的文件夹的内容了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

android build,android通讯录开发实例

android build,android通讯录开发实例

45.# MTK, Infinity, 20090720 {

46.wifi.interface=wlan0

47.# MTK, Infinity, 20090720 }

48.# MTK, mtk03034, 20101210 {

49.ro.mediatek.wlan.wsc=1

50.# MTK, mtk03034 20101210}

51.# MTK, mtk03034, 20110318 {

52.ro.mediatek.wlan.p2p=1

53.# # MTK, mtk03034 20110318}

54.# MTK, mtk03034, 20101210 {

55.mediatek.wlan.ctia=0

56.# MTK, mtk03034 20101210}

57.#

58.# MTK, TeChien {     #MTK芯片的增强定义,有关相机和音频处理,乱改后果自负

59.ro.media.enc.hprof.file.format=3gp

60.ro.media.enc.hprof.codec.vid=m4v

61.ro.media.enc.hprof.vid.width=720

62.ro.media.enc.hprof.vid.height=480

63.ro.media.enc.hprof.vid.fps=30

64.ro.media.enc.hprof.vid.bps=3400000

65.ro.media.enc.hprof.codec.aud=amrnb

66.ro.media.enc.hprof.aud.bps=12200

67.ro.media.enc.hprof.aud.ch=1

68.ro.media.enc.hprof.aud.hz=8000

69.ro.media.enc.mprof.file.format=3gp

70.ro.media.enc.mprof.codec.vid=m4v

71.ro.media.enc.mprof.vid.width=352

72.ro.media.enc.mprof.vid.height=288

73.ro.media.enc.mprof.vid.fps=30

74.ro.media.enc.mprof.vid.bps=990000

75.ro.media.enc.mprof.codec.aud=amrnb

76.ro.media.enc.mprof.aud.bps=12200

77.ro.media.enc.mprof.aud.ch=1

78.ro.media.enc.mprof.aud.hz=8000

79.ro.media.enc.lprof.file.format=3gp

80.ro.media.enc.lprof.codec.vid=h263

81.ro.media.enc.lprof.vid.width=176

82.ro.media.enc.lprof.vid.height=144

83.ro.media.enc.lprof.vid.fps=30

84.ro.media.enc.lprof.vid.bps=384000

85.ro.media.enc.lprof.codec.aud=amrnb

86.ro.media.enc.lprof.aud.bps=12200

87.ro.media.enc.lprof.aud.ch=1

88.ro.media.enc.lprof.aud.hz=8000

89.# MTK, TeChien }

90.wifi.tethering.interface=ap0

91.wifi.direct.interface=p2p0

92.ro.opengles.version=131072

93.#

94.# ADDITIONAL_BUILD_PROPERTIES

95.# 以下是附加属性定义,可以修改,进行优化

96.bird.updatezip.code=BIRD

97.bird.updatezip.code=BIRD

98.bird.updatezip.code=BIRD

99.bird.updatezip.code=BIRD

100.bird.updatezip.code=BIRD

101.bird.updatezip.code=BIRD

102.bird.updatezip.code=BIRD

103.ro.sf.hwrotation=0    #自动转屏

104.launcherplus.allappsgrid=2d

105.curlockscreen=2      #开机启动时显示的锁屏画面,注意这个不是平时的锁屏画面

106.ril.current.share_modem=2

107.ro.mediatek.gemini_support=true

108.birdsenselauncherg11=true

109.curlockscreen=6      #锁屏默认画面的选择,用1至9数字选择,论坛内有高手已经把详细说明给出

110.bird_input_method_by_language=true

111.ro.config.notification_sound=OnTheHunt.ogg  #默认通知铃声

112.ro.config.alarm_alert=Alarm_Classic.ogg   #默认闹钟铃声

113.persist.sys.timezone=Asia/Shanghai    #强制时区,此处为亚洲上海时间

114.ro.config.ringtone=CaribbeanIce.ogg    #默认响铃铃声

115.launcher2.allappsgrid=3d_20

116.media.stagefright.enable-player=false

117.media.stagefright.enable-Meta=false

118.media.stagefright.enable-scan=false

119.media.stagefright.enable-http=false

120.ro.setupwizard.mode=disABLED    #默认开机时使用设置向导,此处为关闭

121.net.bt.name=Android    #蓝牙网络中显示的名称,可以修改

总结

可以看出,笔者的工作学习模式便是由以下 「六个要点」 组成:

❝ 多层次的工作/学习计划 + 番茄工作法 + 定额工作法 + 批处理 + 多任务并行 + 图层工作法❞

希望大家能将这些要点融入自己的工作学习当中,我相信一定会工作与学习地更富有成效。

下面是我学习用到的一些书籍学习导图,以及系统的学习资料。每一个知识点,都有对应的导图,学习的资料,视频,面试题目。

**如:我需要学习 **Flutter的知识。(大家可以参考我的学习方法)

点击这里了解更多即可领取!

  • Flutter 的思维导图(无论学习什么,有学习路线都会事半功倍)

  • Flutter进阶学习全套手册

  • Flutter进阶学习全套视频

都会事半功倍)**

[外链图片转存中…(img-bW0NlAcR-1643942856169)]

  • Flutter进阶学习全套手册

[外链图片转存中…(img-bmXMwyLw-1643942856170)]

  • Flutter进阶学习全套视频

[外链图片转存中…(img-x6dcKsuD-1643942856171)]

大概就上面这几个步骤,这样学习不仅高效,而且能系统的学习新的知识。

Android Error:Unable to find method ''com.android.build.gradle.api.BaseVariant.getOutputs()Lja...

Android Error:Unable to find method ''com.android.build.gradle.api.BaseVariant.getOutputs()Lja...

问题:Error:Unable to find method ''com.android.build.gradle.api.BaseVariant.getOutputs () Ljava/util/List;''.
Possible causes for this unexpected error include:<ul><li>Gradle''s dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
<a href="syncProject">Re-download dependencies and sync project (requires network)</a></li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.

<a href="stopGradleDaemons">Stop Gradle build processes (requires restart)</a></li><li>Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

 

build.gradle 如下:

   buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath ''com.android.tools.build:gradle:3.0.0''
        classpath ''com.jakewharton:butterknife-gradle-plugin:8.4.0''
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

 

查阅了很久发现其实是 Android Studio3.0 与 butterknife 的冲突,github 上面已经有了这个问题 issue,JakeWharton 大神也给了相关解释,暂时的解决方法是降至 8.4 的版本。

今天关于Android Build Variants 为项目设置变种版本的方法androidstudio怎么改变项目包名的介绍到此结束,谢谢您的阅读,有关Android Build Variants based on gradle、Android build文件的删除的方法、android build,android通讯录开发实例、Android Error:Unable to find method ''com.android.build.gradle.api.BaseVariant.getOutputs()Lja...等更多相关知识的信息可以在本站进行查询。

本文标签: