同一套代码,同一个apk,在同一个设备上安装为多个app

同一套代码,同一个apk,在同一个设备上安装为多个app。

比如想要在同一个手机上安装一份debug版本,一份release版本。但是后面安装的总会覆盖前面安装,最终只能安装一份。

安卓是用包名来区分apk的,如果包名相同,会被认为是同一个apk。

所以我们要作为两个不同app安装的需要修改包名。

在AndroidManifest.xml,

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xx.yyy.zz.packageName">

我们只需要修改package为不同的名字即可。

 

 

但是如果你设置有provider的话,会遇到下面的错误。

INSTALL_FAILED_CONFLICTING_PROVIDER
<application
    android:name="......">
    <provider
        android:name="xxx.yyy.zzz"
        android:authorities="aaa.bbb.ccc"></provider>

你需要把authorities也修改为不同的值。

 

 

总结

同一份代码在同一个设备上安装为多个app,你需要修改两个地方的设置

①package名

②provider的 authorities值

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是一个简单的示例代码,用于在Android原生开发中实现视频列表的播放: 1. 首先,确保你的项目中已经添加了视频播放所需的依赖项。在你的app的build.gradle文件中添加以下依赖: ```groovy implementation 'com.google.android.exoplayer:exoplayer:2.X.X' ``` 2. 创建一个RecyclerView来展示视频列表。首先,在你的布局文件中添加一个RecyclerView: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/videoRecyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 创建一个VideoAdapter用于管理RecyclerView中的视频列表。在你的Activity或Fragment中创建一个VideoAdapter类: ```java public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.VideoViewHolder> { private List<String> videoUrls; private Context context; public VideoAdapter(Context context, List<String> videoUrls) { this.context = context; this.videoUrls = videoUrls; } @NonNull @Override public VideoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_video, parent, false); return new VideoViewHolder(view); } @Override public void onBindViewHolder(@NonNull VideoViewHolder holder, int position) { String videoUrl = videoUrls.get(position); holder.bindVideo(videoUrl); } @Override public int getItemCount() { return videoUrls.size(); } public class VideoViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private PlayerView playerView; private SimpleExoPlayer player; public VideoViewHolder(@NonNull View itemView) { super(itemView); playerView = itemView.findViewById(R.id.playerView); itemView.setOnClickListener(this); } public void bindVideo(String videoUrl) { // 创建ExoPlayer实例 player = new SimpleExoPlayer.Builder(context).build(); playerView.setPlayer(player); // 创建媒体源 Uri uri = Uri.parse(videoUrl); MediaItem mediaItem = MediaItem.fromUri(uri); player.setMediaItem(mediaItem); // 准备播放 player.prepare(); } @Override public void onClick(View v) { // 处理点击事件,例如打开全屏播放器等 // 这只是简单地暂停/恢复播放 if (player.isPlaying()) { player.pause(); } else { player.play(); } } } } ``` 4. 创建一个布局文件用于VideoViewHolder中的PlayerView。在res/layout文件夹中创建一个名为item_video.xml的布局文件: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <com.google.android.exoplayer2.ui.PlayerView android:id="@+id/playerView" android:layout_width="match_parent" android:layout_height="200dp" /> </LinearLayout> ``` 5. 在你的Activity或Fragment中,初始化RecyclerView并设置VideoAdapter: ```java public class MainActivity extends AppCompatActivity { private RecyclerView videoRecyclerView; private VideoAdapter videoAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); videoRecyclerView = findViewById(R.id.videoRecyclerView); videoRecyclerView.setLayoutManager(new LinearLayoutManager(this)); List<String> videoUrls = new ArrayList<>(); // 添加视频URL到列表中 videoUrls.add("https://www.example.com/video1.mp4"); videoUrls.add("https://www.example.com/video2.mp4"); videoUrls.add("https://www.example.com/video3.mp4"); videoAdapter = new VideoAdapter(this, videoUrls); videoRecyclerView.setAdapter(videoAdapter); } } ``` 这样,你就可以在Android原生开发中实现一个简单的视频列表播放功能了。当用户点击列表中的视频项时,视频将在PlayerView中播放或暂停。 请注意,这只是一个基本示例,并没有处理更复杂的播放控制和错误处理。在实际开发中,你可能需要根据需求对代码进行更多的自定义和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值