精华内容
参与话题
问答
  • Bundle 用法

    万次阅读 2012-11-25 00:56:34
    android Bundle的使用 bundle的认识:  一种存放字符串和Parcelable类型数据的map类型的容器类,通过存放数据键(key)获取对应的各种类型的值(value),而且必须通过键(key)获取。 bundle的用法:  ...

    android Bundle的使用

    bundle的认识:

            一种存放字符串和Parcelable类型数据的map类型的容器类,通过存放数据键(key)获取对应的各种类型的值(value),而且必须通过键(key)获取。


    bundle的用法:

           Bundle相当于Map类,就是一个映射,用Bundle绑定数据,便于数据处理

            它主要作用于Activity之间的数据传递. 

     

    //TestBundle.java

    Bundle bundle = new Bundle();//创建一个句柄

    bundle.putString("name", nameinfo);//将nameinfo填充入句柄

    Intent mIntent = new Intent(TestBundle.this,TestBundle_getvalue.class);

    mIntent.putExtras(bundle);

    startActivity(mIntent);

     

    //TestBundle_getvalue.java

    Bundle bundle = getIntent().getExtras();//获取一个句柄

    String nameString=bundle.get("name");//通过key为“name”来获取value即 nameString.

    /*

    *进行相关操作

    */

     

    bundle的实例:

          第一个Activity发出参数!

    import android.app.Activity; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.view.MotionEvent; 

    public class TestBundle extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    public boolean onTouchEvent(MotionEvent event) { 
    Intent intent = new Intent(); 
    intent.setClass(TestBundle.this, Target.class); 
    Bundle mBundle = new Bundle(); 
    mBundle.putString("Data", "hello, bear");//压入数据 
    intent.putExtras(mBundle); 
    startActivity(intent); 
    finish(); 
    return super.onTouchEvent(event); 



    第二个Activity,接收参数

    import android.app.Activity; 
    import android.os.Bundle; 

    public class Target extends Activity{ 

    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Bundle bundle = getIntent().getExtras(); 
    String data=bundle.getString("Data");//读出数据 
    setTitle(data); 

    }


    另外onCreate(Bundle savedInstanceState) 中的savedInstanceState用于当前activity被切换之前保存临时数据,以便在下次返回时显示之前的数据的。因此在想使用Bundle savedInstanceState保存临时数据,就应该在onCreate(Bundle savedInstanceState)方法中提前写好savedInstanceState!=null时的逻辑。参照理解:http://blog.sina.com.cn/s/blog_652dd96d0100ug6h.html


    展开全文
  • Android Bundle详解

    万次阅读 多人点赞 2014-09-04 15:34:31
    Android Bundle总结     版本 修改内容 日期 修改人 1.0 初稿 2013/03/06 skywang         1 Bundle介绍 Bundle主要用于传递数据;


    1 Bundle介绍

    Bundle主要用于传递数据;它保存的数据,是以key-value(键值对)的形式存在的。

     

    我们经常使用Bundle在Activity之间传递数据,传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组,也可以是对象或对象数组。当Bundle传递的是对象或对象数组时,必须实现Serializable 或Parcelable接口。下面分别介绍Activity之间如何传递基本类型、传递对象。

     

    2传递基本类型

    Bundle提供了各种常用类型的putXxx()/getXxx()方法,用于读写基本类型的数据。Bundle操作基本数据类型的API表格如下所示:

     

    写数据的方法如下:

    // "com.test" is the package name of the destination class
    // "com.test.Activity02" is the full class path of the destination class
    Intent intent = new Intent().setClassName("com.bundletest", "com.bundletest.Bundle02");
    
    Bundle bundle = new Bundle();
    bundle.putString("name", "skywang");
    bundle.putInt("height", 175);
    intent.putExtras(bundle);
    
    startActivity(intent);
    
    // end current class
    finish();


    对应的读数据的方法如下:

    Bundle bundle = this.getIntent().getExtras();  
      
    String name = bundle.getString("name");  
    int height = bundle.getInt("height");


    3传递Parcelable类型的对象

    3.1 Parcelable说明

    Parcelable是Android自定义的一个接口,它包括了将数据写入Parcel和从Parcel中读出的API。一个实体(用类来表示),如果需要封装到bundle消息中去,可以通过实现Parcelable接口来实现。


    Parcelable和Serializable的API如下表:



    3.2 Parcelable接口说明

    public interface Parcelable {
        //内容描述接口,基本不用管
        public int describeContents();
        //写入接口函数,打包
        public void writeToParcel(Parcel dest, int flags);
        //读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入。
        //为了能够实现模板参数的传入,这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例。
        public interface Creator<T> {
            public T createFromParcel(Parcel source);
            public T[] newArray(int size);
     }
    }
    


    3.3 Parcelable接口的实现方法

    从parcelable接口定义中,我们可以看到,实现parcelable接口,需要我们实现下面几个方法:
    (01)describeContents方法。内容接口描述,默认返回0就可以;
    (02)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.即打包需要传递的数据到Parcel容器保存,以便从parcel容器获取数据,该方法声明如下:
    writeToParcel(Parcel dest, int flags) 具体参数含义见doc文档
    (3.)静态的Parcelable.Creator接口,本接口有两个方法:
    createFromParcel(Parcelin)  从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。
    newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(returnnew T[size])即可。方法是供外部类反序列化本类数组使用。

     

    4传递Serializable类型的对象

    4.1 Serializable说明

    Serializable是一个对象序列化的接口。一个类只有实现了Serializable接口,它的对象才是可序列化的。因此如果要序列化某些类的对象,这些类就必须实现Serializable接口。而实际上,Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化。

    4.2 Serializable接口的实现方法

    很简单,只要implements Serializable接口就可以了

     

    5 demo演示程序

    下面是对实现上述三种数据传递方式的BundleTest(demo程序)进行简要介绍

    5.1 demo概要

    BundleTest共包含了4个java文件和2个layout文件(main.xml和main2.xml)

    Bundle01.java     —— 默认的主Activity窗口。

    Bundle02.java     —— 主Activity用于跳转的目的窗口。

    Book.java            —— 实现Parcelable接口的类

    Person.java        —— 实现Serializable接口的类

    main.xml             —— Bundle01.java的layout文件

    main2.xml           —— Bundle02.java的layout文件

     

    工程文件结构如下所示:


     

    5.2代码

    AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.bundletest"
          android:versionCode="1"
          android:versionName="1.0">
    	
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".Bundle01"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    		<activity android:name=".Bundle02"> </activity>
        </application>
        <uses-sdk android:minSdkVersion="11" />
    </manifest> 
    



    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    	<TextView  
    		android:layout_width="fill_parent" 
    		android:layout_height="wrap_content" 
    		android:text="@string/app_01"
    		/>
    
    	<Button  
    		android:id="@+id/btnBasic" 
    		android:layout_width="fill_parent" 
    		android:layout_height="wrap_content" 
    		android:text="@string/text_basic"
    		/>
    
    	<Button  
    		android:id="@+id/btnPar" 
    		android:layout_width="fill_parent" 
    		android:layout_height="wrap_content" 
    		android:text="@string/text_par"
    		/>
    
    	<Button  
    		android:id="@+id/btnSer" 
    		android:layout_width="fill_parent" 
    		android:layout_height="wrap_content" 
    		android:text="@string/text_ser"
    		/>
    
    
    
    </LinearLayout>
    



    main2.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    	<TextView  
    		android:layout_width="fill_parent" 
    		android:layout_height="wrap_content" 
    		android:text="@string/app_02"
    		/>
    
    	<Button  
    		android:id="@+id/btnBack" 
    		android:layout_width="fill_parent" 
    		android:layout_height="wrap_content" 
    		android:text="@string/text_jump_back"
    		/>
        
    </LinearLayout>
    



    strings.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello MyBundleTest!</string>
        <string name="app_name">MyBundleTest</string>
        <string name="app_01">Bundle_01</string>
        <string name="app_02">Bundle_02</string>
        <string name="text_basic">Bundle Basic Data</string>
        <string name="text_par">Bundle Parcelable Data</string>
        <string name="text_ser">Bundle Seriable Data</string>
        <string name="text_jump_back">Jump Back to Bundler01</string>
    </resources>
    



    Bundle01.java

    package com.bundletest;
    
    import android.app.Activity;
    import android.os.Bundle;  
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.content.Intent;
    import android.util.Log;
    
    public class Bundle01 extends Activity implements View.OnClickListener{
    
    	private static final String TAG = "skywang-->Bundle01";
    
    	private Button mBtnBasic = null;
    	private Button mBtnPar = null;
    	private Button mBtnSer = null;
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    
    		mBtnBasic = (Button) findViewById(R.id.btnBasic);
    		mBtnBasic.setOnClickListener(this);
    
    		mBtnPar = (Button) findViewById(R.id.btnPar);
    		mBtnPar.setOnClickListener(this);
    
    		mBtnSer = (Button) findViewById(R.id.btnSer);
    		mBtnSer.setOnClickListener(this);
    	}
    
    
    	@Override
    	public void onClick(View view) {
    		switch (view.getId()) {
    			case R.id.btnBasic:
    				sendBasicDataThroughBundle();
    				break;
    			case R.id.btnPar:
    				sendParcelableDataThroughBundle();
    				break;
    			case R.id.btnSer:
    				sendSeriableDataThroughBundle();
    				break;
    			default:
    				break;
    
    		}
    	}
    
    	// sent basic data, such as int, strin, etc...  through bundle
        private void sendBasicDataThroughBundle(){  
    		// "com.test" is the package name of the destination class
    		// "com.test.Activity02" is the full class path of the destination class
    		Intent intent = new Intent().setClassName("com.bundletest", "com.bundletest.Bundle02");
    		
    		Bundle bundle = new Bundle();
    		bundle.putString("name", "skywang");
    		bundle.putInt("height", 175);
    		intent.putExtras(bundle);
    		
    		startActivity(intent);
    
    		// end current class
    		finish();
    	}
    
    	// sent object through Pacelable
        private void sendParcelableDataThroughBundle(){  
    		Intent intent = new Intent().setClassName("com.bundletest", "com.bundletest.Bundle02");
    
            Book mBook = new Book();
            mBook.setBookName("Android");
            mBook.setAuthor("skywang");
            mBook.setPublishTime(2013);
    
            Bundle mBundle = new Bundle();
            mBundle.putParcelable("ParcelableValue", mBook);
            intent.putExtras(mBundle);
              
            startActivity(intent);
    		finish();
        }
    
    	// sent object through seriable
        private void sendSeriableDataThroughBundle(){  
    		Intent intent = new Intent().setClassName("com.bundletest", "com.bundletest.Bundle02");
    
    		Person mPerson = new Person();
            mPerson.setName("skywang");
            mPerson.setAge(24);
    
            Bundle mBundle = new Bundle();
            mBundle.putSerializable("SeriableValue",mPerson);
            intent.putExtras(mBundle);
              
            startActivity(intent);
    		finish();
        }
    
    }
    



    Bundle02.java

    package com.bundletest;
    
    import android.app.Activity;
    import android.os.Bundle;  
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.content.Intent;
    import android.util.Log;
    
    public class Bundle02 extends Activity implements View.OnClickListener {
    
    	private static final String TAG = "skywang-->Bundle02";
    
    	private Button mBtnBack = null;
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main2);
    
    		mBtnBack = (Button) findViewById(R.id.btnBack);
    		mBtnBack.setOnClickListener(this);
    
    		receiveBasicData();
    		receiveParcelableData();
    		receiveSeriableData();
    	}
    
    	private void receiveBasicData() {
            Bundle bundle = this.getIntent().getExtras();  
              
            String name = bundle.getString("name");  
            int height = bundle.getInt("height");
    		if (name != null && height != 0)
    		Log.d(TAG, "receice basic data -- " +
    				   "name="+name+", height="+height);
    	}
    
    	private void receiveParcelableData() {
    		Book mBook = (Book)getIntent().getParcelableExtra("ParcelableValue");
    		if (mBook != null)
    			Log.d(TAG, "receice parcel data -- " +
    					   "Book name is: " + mBook.getBookName()+", "+
    					   "Author is: " + mBook.getAuthor() + ", "+
    					   "PublishTime is: " + mBook.getPublishTime());
    	}
    
    	private void receiveSeriableData() {
    		Person mPerson = (Person)getIntent().getSerializableExtra("SeriableValue");  
    		if (mPerson != null)
    			Log.d(TAG, "receice serial data -- " +
    					   "The name is:" + mPerson.getName() + ", "+
    					   "age is:" + mPerson.getAge());  
    	}
    
    	@Override
    	public void onClick(View view) {
    		switch (view.getId()) {
    			case R.id.btnBack:
    			{
    				// "com.test" is the package name of the destination class
    				// "com.test.Activity01" is the full class path of the destination class
    				Intent intent = new Intent().setClassName("com.bundletest", "com.bundletest.Bundle01");
    				startActivity(intent);
    				// end current class
    				finish();
    			}
    				break;
    			default:
    				break;
    
    		}
    	}
    
    }
    



    Book.java

    package com.bundletest;
    
    import android.os.Parcel;  
    import android.os.Parcelable;  
    
    public class Book implements Parcelable {  
        private String bookName;  
        private String author;  
        private int publishTime;  
          
        public String getBookName() {  
            return bookName;  
        }  
        public void setBookName(String bookName) {  
            this.bookName = bookName;  
        }  
        public String getAuthor() {  
            return author;  
        }  
        public void setAuthor(String author) {  
            this.author = author;  
        }  
        public int getPublishTime() {  
            return publishTime;  
        }  
        public void setPublishTime(int publishTime) {  
            this.publishTime = publishTime;  
        }  
          
        public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() {  
    		@Override
            public Book createFromParcel(Parcel source) {  
                Book mBook = new Book();  
                mBook.bookName = source.readString();  
                mBook.author = source.readString();  
                mBook.publishTime = source.readInt();  
                return mBook;  
            }  
    		@Override
            public Book[] newArray(int size) {  
                return new Book[size];  
            }  
        };  
          
    	@Override
        public int describeContents() {  
            return 0;  
        }  
    
    	@Override
        public void writeToParcel(Parcel parcel, int flags) {  
            parcel.writeString(bookName);  
            parcel.writeString(author);  
            parcel.writeInt(publishTime);  
        }  
    }  
    



    Person.java

    package com.bundletest;
    
    import java.io.Serializable;  
    
    public class Person implements Serializable {  
    
        private static final long serialVersionUID = 1L; 
    
        private String name;  
        private int age;  
        public String getName() {  
            return name;  
        }  
        public void setName(String name) {  
            this.name = name;  
        }  
        public int getAge() {  
            return age;  
        }  
        public void setAge(int age) {  
            this.age = age;  
        }  
          
    }  
    



     

    5.3输出图片

    Bundle01.java对应的界面如下:

     

    点击“Bundle Basic Data”、“Bundle Parcelable Data”、“Bundle Seriable Data”均跳转到如下界面,但它们对应的logcat信息不同。


     

    点击“Bundle Basic Data”的logcat如下:


    点击“Bundle Parcelable Data”的logcat如下:


    点击“Bundle Seriable Data”的logcat如下:


    转自:http://www.cnblogs.com/skywang12345/archive/2013/03/06/3165555.html

    展开全文
  • Android App Bundle的学习整理

    万次阅读 2018-10-18 22:39:04
    对于手机用户来说,“存储空间不足” ...如何针对不同的用户给出最优的安装体验,正是 Android App Bundle 所要解决的问题 传统的APK Android Package Kit 包含了应用支持的所有设备的代码和资源,您在安装apk是...

    对于手机用户来说,“存储空间不足” 警告有时会显得非常烦人。时至今日,手机存储容量仍然是有限的。虽然存储容量多年来一直在增长,但是填充在我们手机里的东西:音乐、应用、游戏、照片等也同样在增长。如何针对不同的用户给出最优的安装体验,正是 Android App Bundle 所要解决的问题

    传统的APK

    • Android Package Kit
    • 包含了应用支持的所有设备的代码和资源,您在安装apk是可能装上了一些永远也用不到的资源。
    • 很明显,apk里的内容比您要求的还要多,占用的空间比实际需要的更多
    • Android app Bundle的出现可以让开发者用更小的apk交付同样卓越的应用。

    Android App Bundle 是什么?

    • 是一种的新的发布格式。
    • 准确的说,是一个带有.abb扩展名的zip文件。
    • 包含应用支持的所有设备的代码和资源。例如DEX文件,本地代码库,清单文件,资源文件等。
    • 一旦上传发布,Google Play就会处理APK的签名和生成,这个过程称为动态交付(Dynamic Delivery)
    • 动态交付的优点:根据用户的设备配置为用户生成优化的APK

    在这里插入图片描述

    • 分拆 APK (在 Lollipop 中引入) 是从给定的 Android App Bundle 生成的,其行为与单个 APK 无异
    • 一个典型的应用可以获得一个基础APK多个配置APK
    • 基本APK包含所有设备配置共有的文件,如清单文件。
    • 配置APK就是为用户生成的了,每个里面都包含了特定设备配置的相关资源:语言,CPU架构,或者屏幕密度。
    • 到用户设备里的就是基本APK(其他任何设备也会获得)以及包含用户设备相关资源的配置APK。

    详细解释

    • 我手上有一台小米A1,我设置了主要语言为英语。
    • 那么我下载到的apk就是基础APK以及支持英文,arm64 CPU架构和xhdpi屏幕分辨率的配置APK。
    • 更厉害的是:当你的设备配置(如语言)发生改变,Google Play会检测到它,并下载该语言的配置APK。

    动态功能 APK

    • 动态功能 APK包含用户首次安装应用时 不需要的应用功能和资源。
    • 开发者可以把这些功能添加到应用中,Google Play会按需提供这些动态功能模,而不是在安装时统一添加,从而进一步减少应用下载体积。
    • 简单理解就是:我们有必要将那些消耗空间且在安装时根本用不着的功能,以及那些很少用得着的功能,都打包进动态功能模块中,这将显著减少用户安装时的文件下载量。

    Android App Bundle != APK

    Android App Bundle 与 APK 有一些相似之处,但它们是截然不同的,且用于不同的目的。

    • APP Bundle(应用束)纯粹是为了上传设计的文件,用户无法直接安装和使用它。它是一个zip文件,Google Play 从中生成优化的APK并将其提供给设备进行安装。
    • 应用束包含用于帮助工具生成 APK 的元数据文件 (这些元数据文件最终不会出现在 APK 中),此外还拥有严格的验证标准。

    从 APK 切换到应用束是一个无缝过程。如果您使用 Android Studio 3.2 及更高版本,那么您只需点击几下即可生成已签名的应用束,将其上传到 Play Store,即可让用户开始享受更小尺寸 APK 所带来的便利。由于您的代码库没有重大变化,因此您无需担心会有什么问题发生。Android App Bundle 的早期采用者已经发现,动态交付显著减小了他们的应用体积。一些开发者甚至可以将他们的 APK 大小减半

    Android App Bundle 的好处都有哪些?

    • 体积小,用户安装时无需考虑是否需要腾出空间
    • Android App Bundle 是单一工件,因此无需构建、签名或管理多个 APK
    • 您可以为特定用例和受众添加动态功能,而无需增加安装时的应用体积

    构建 App Bundle

    • 在 Android Studio 中打开项目后,转到菜单栏并选择 Build > Build Bundle(s)/ APKs > Build Bundle(s)。等待生成应用束。您可以在生成应用束后的弹出窗口中点击选项来找到生成的 .aab 文件,并进行分析
    • 想要生成签名版本的话,请选择Build > Generate Signed Bundle/APK… > Android App Bundle > Select Base Module > Enter Signing Credentials & Check any other options (和您操作 APK 所做的事情一样)
    • 想要更好地控制从 Android App Bundle 进行拆分的方式的话,您可以从应用束的设置区块中进行精确设置:
    android {
        ...
        bundle {
            density {
                enableSplit = <true or false>
            }
            
            language {
                enableSplit = <true or false>
            }
            
            abi {
                enableSplit = <true or false>
            }
        }
    }
    

    小结

    • 正如我们所见,Android App Bundle 代表着 Android 应用交付的未来,提供单一的 APK 的做法已经过时。应用体积可以减小,而且还可以提供定制功能,为每个用户提供度身定制的体验
    • 更棒的是,开发者并不需要花费太大力气就可以尽享这些收益。一些开发者已经发现应用体积大幅减少。用户也可以获得极大的好处,因为他们的设备可以为音乐、电影、应用等其他内容提供更多的可用空间。开发者还可以通过使用 Android Vitals 进一步提高其应用在用户设备上的性能和稳定性。

    参考

    展开全文
  • iOS 将图片文件打包为bundle资源

    千次阅读 2018-05-09 10:57:59
    1. 创建bundle,如图,点击 + ,弹出选择框, macOS 下的Framework &amp; Library ,点击bundle,输入bundle的名字,然后点击 finish。2. 点击创建好的bundle ,修改属性2.1 "Base SDK" 设置为 "...

    1. 创建bundle,如图,点击 +  ,弹出选择框, macOS 下的Framework & Library  ,点击bundle,输入bundle的名字,然后点击 finish。



    2. 点击创建好的bundle ,修改属性


    2.1 "Base SDK" 设置为 "Latest iOS (iOS 11.2)" (Xcode 9.2为例)


    2.2 "Build Active Architecture Only" 设置为 "YES"


    2.3 Installation Directiotory    删除掉后面的路径


    2.4Code Signing Identity   选择 Don't Code Sign  


    2.5"iOS Deployment Target" 设置为 iOS 9.0  (为了兼容性,最好选择最低版本)


    2.6"Skip Install" 设置为 "NO"


    2.7"Strip Debug Symbols During Copy" 中"Release"模式设置为 "YES"


    2.8"COMBINE_HIDPI_IMAGES" 设置为 "NO"


    3. 现在开始导入资源,可以导入Xib文件和图片,此处以导入图片为例,点击➕进行添加,如图3.1;或者直接将图片拖入左侧创建的bundle文件夹下,系统会自动导入Copy Bundle Resources里去,如图所示:


    4. 选择创建的bundle 进行编译,开始生成bundle,分别选择真机和模拟器,然后各运行一遍,即可生成真机和模拟器使用的bundle:

    5. 找到生成的bundle,打包上架APP的时候应使用真机模式下运行生成的Bundle,即Debug-iPhoneos 文件夹内的bundle。




    6. 将要使用的bundle集成到项目中后,就可以使用了。需要注意的就是,bundle是静态的,不进行编译的资源文件。所以,要使用bundle中的资源,就需要找到相应的资源路径。

    VC获得bundle中的资源

    NSString * bundlePath = [[ NSBundle mainBundle] pathForResource: @ "imageb"ofType :@ "bundle"];

    NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];

    UIViewController *vc = [[UIViewController alloc] initWithNibName:@"vc_name"bundle:resourceBundle];

    图片获得bundle中的资源

    UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50,50)];

    UIImage *image = [UIImage imageNamed:@"imageb.bundle/1.png"];

    [imgView setImage:image];

    或者

    UIImageView *imgView=[[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50,50)];

    NSString *bundlePath = [[ NSBundle mainBundle] pathForResource:@"Test" ofType :@"bundle"];

    NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];

    NSString *img_path = [bundle pathForResource:imageName ofType:@"png"];

    UIImage *image_1=[UIImage imageWithContentsOfFile:img_path];

    [imgView setImage:image_1];

    当然,可以写成预编译语句:

    #define MYBUNDLE_NAME @ "imageb.bundle"

    #define MYBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: MYBUNDLE_NAME]

    #define MYBUNDLE [NSBundle bundleWithPath: MYBUNDLE_PATH]

    7.如果将自己打包的bundle给别人使用,别人在打包上传过程中可能会遇到错误提示如:

    ERROR ITMS-90171: "Invalid Bundle Structure - The binary file 'lhby.app/Test.bundle/Test' is not permitted. Your app can’t contain standalone executables or libraries, other than a valid CFBundleExecutable of supported bundles. Refer to the Bundle Programming Guide at...

    或者

    ERROR ITMS-90535: "Unexpected CFBundleExecutable Key. The bundle at 'Payload/dianlan2.app/EaseUIResource.bundle' does not contain a bundle executable. If this bundle intentionally does not contain an executable, consider removing the CFBundleExecutable key from its Info.plist and using a CFBundlePackageType of BNDL. If this bundle is part of a third-party framework, consider contacting the developer of the framework for an update to address this issue."

    或者

    ERROR ITMS-90034: "Missing or invalid signature. The bundle 'ABC.Test' at bundle path 'Payload/lhby.app/Test.bundle' is not signed using an Apple submission certificate."

    网上也有很多的解决办法,这里提供一种解决方法,就是删除bundle里的执行文件:找到工程中的Test.Bundle,右键单击后 选择 "显示包内容",找到里面黑色的可执行文件Test,删除掉,然后找到里面的info.plist文件 ,删除掉Executable file 字段,重新打包,上传应用商店就可以了。



    展开全文
  • bundle install

    千次阅读 2018-11-14 04:19:38
    bundle install
  • 加载.bundle中资源

    2018-09-17 11:22:58
    NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"SourcesBundle" ofType:@"bundle"]; NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath]; 2、 加载 ...
  • bundle 文件的理解

    千次阅读 2018-08-03 14:44:10
    【知识总结】bundle 文件的理解 小子爱搞事 关注 2017.02.17 14:1...
  • 【Android开发】Bundle机制

    万次阅读 2019-06-12 17:06:18
    Bundle在Android开发中十分常见,常用于以下场合: 1.Activity状态数据的保存与恢复涉及到的两个回调:void onSaveInstanceState (Bundle outState)、void onCreate (Bundle savedInstanceState) 2.Fragment的...
  • Bundle的使用与解析

    万次阅读 2019-02-20 22:24:08
    Bundle 应用场景举例 Activity:onCreat()、onSaveInstanceState() Fragment: setArguments() Message:setData() 源码 //位于android.os包中,final类 public final class Bundle extends BaseBundle implements ...
  • Android Bundle

    万次阅读 多人点赞 2011-08-01 17:27:55
    Android Bundle
  • Ubuntu 安装 .bundle 文件

    万次阅读 2016-05-10 10:56:55
    一、.bundle 文件比较特殊,只有在给它了执行权限后才能执行安装操作。所以安装的第一步就是给 .bundle 文件添加执行权限。介绍两种方法: 1、在 *.bundle 文件上右击鼠标,选择最后一项“属性” 选项,在弹出的...
  • Bundle的说明和用法

    千次阅读 2016-01-05 18:49:32
    Android初学者第一次遇到Bundle出现在Intent传值中。 1.Bundle类的作用  Bundle类是一种数据载体,类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,  ...
  • Android Bundle 实例介绍

    千次阅读 2018-04-04 16:58:08
    1、Bundle简介 2、传递基本类型 3、传递Parcelable类型的对象 1)Parcelable说明 2)Parcelable 接口说明 3)Parcelable 接口的是实现的 方法 4、传递Serializable类型的对象 1)Serializable说明 2)Serializable ...
  • Android Bundle总结

    千次阅读 2017-05-23 15:42:07
    Bundle 介绍官方文档对Bundle的说明如下: A mapping from String values to various Parcelable types. 官方意为Bundle封装了String值到各种Parcelable类型数据的映射,可见跟我们...Bundle位于android.os包中,是
  • Android Bundle App内部实现原理

    千次阅读 2018-07-28 17:51:27
    core中的代码   首先我们在代码中调用了 manager = SplitInstallManagerFactory.create(this) 1.SplitInstallManagerFactory.class public class ... public static SplitInstallManager...
  • android bundle封装传递map对象

    千次阅读 2016-07-01 17:07:12
    创建一个继承Serializable的类,用于传递不同的mappublic class SerializableMap implements Serializable { private Map,String> stringMap; private Map,int[]> intsMap; public Map, String> getS
  • android bundle传递参数

    2017-01-02 06:02:53
    在疯狂android中有个例子,关于bundle传递参数的。 在DummyFragment.java中,最开始定义的参数“public static final String ARG_SECTION_NUMBER = "section_number";”,在ActionBar_TabNav中有如下代码 //...
  • Android bundle 传值方法

    千次阅读 2015-07-06 11:28:18
    1.传值 public void onClick(View arg0) {   // TODO Auto-generated method stub   Intent intent = new Intent();   intent.setClass(TestBundle.this, Targ
  • Android Bundle传递数据

    千次阅读 2019-04-16 11:11:42
    Bundle 是用来传递数据的,其以key-value保存数据,可以传递boolean,byte,int,long,float,double,string等基本类型或他们对应的数组,也可以是对象或对象数组,但必须实现Seriallzable或Parcelable接口。 传递基本...
  • Android Bundle数据类型与Intent详解

    千次阅读 2018-05-19 21:15:46
    Bundle类的作用Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(),putXxx()用于往...
  • Android使用Intent.putSerializable()进行数据传递,或者使用Bundle进行数据传递,实质上都是进行的Serializable数据的操作,说白了都是传递的原数据的一份拷贝,因此通过对象的传递来控制Android应用是不现实的 ...
  • Android Bundle用法及问题

    千次阅读 2017-03-29 23:06:24
    Bundle介绍 Bundle主要用于传递数据:它保存的数据,是以key-value(键值对)的形式存在的。Activity之间的数据传递经常通过Bundle实现,传递的数据可以是boolean、byte、int、long、float、double、string等基本类型...
  • androd使用bundle在activity或者view之间传递数据,比如一个包含fragment的activity在创建fragment时,会用bundle传递信息以完成fragment的创建。然而bundle所能接收的数据类型有限,不包括Map、List等集合类型,...
  • Android Bundle大小限制

    千次阅读 2019-04-24 15:07:33
    Intent中Bundle里的东西有5034408bytes,上网查了一下,Bundle的大小限制为1M 自己测试后发现,不同的手机上这个问题的反应也不一样,在版本比较新的手机上会直接崩溃,在版本比较旧的手机上则表现为startActivity()...
  • Android Bundle传递简单数据、对象数据

    千次阅读 多人点赞 2014-06-17 09:24:16
    介绍使用Bundle传递数据
  • ![图片说明](https://img-ask.csdn.net/upload/201603/26/1458939469_197932.png) ![图片说明]... 我用bundle向两个Activity中传递数据,,但结果无法传递,而且app闪退。。求大神解释,,
  • Android Bundle 传递ArrayList的两种方法

    万次阅读 2015-02-06 00:32:00
    Android Bundle 传递ArrayList的两种方法
  • https://blog.csdn.net/h183288132/article/details/49701615
  • Android bundle 下载地址

    千次阅读 2015-05-25 00:38:38
    Android bundle 下载地址ADT revision 22.6.232位http://dl.google.com/android/adt/adt-bundle-windows-x86-20140321.zip64位https://dl.google.com/android/adt/adt-bundle-windows-x86_64-20140321.zip其他版本...
  • Android bundle总结

    2017-04-12 20:59:35
    1 Bundle介绍 Bundle主要用于传递数据;它保存的数据,是以key-value(键值对)的形式存在的。我们经常使用Bundle在Activity之间传递数据,传递的数据可以是boolean、byte、int、long、float、double、string等基本...

空空如也

1 2 3 4 5 ... 20
收藏数 637,128
精华内容 254,851
关键字:

bundle